前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每周试题练习(四)(0731)

每周试题练习(四)(0731)

作者头像
软件小生活
发布2021-08-16 11:31:31
3350
发布2021-08-16 11:31:31
举报
文章被收录于专栏:软件小生活

一.简答题:

1.内部类根据声明的位置又分为哪两种类型,有什么特点?内部类的访问特点是?

1. 成员内部类:定义在类的里面,方法的外面,就称为成员内部类,使用的多一些,在类里面的,生命周期要长一些

2. 局部内部类:定义在方法的里面,就称为局部内部类,局部内部类使用的不多,因为它定义在方法里面,方法结束了,那么这个内部类也就结束了,生命周期比较短。

1. 内部类可以直接访问外部类的成员,包括私有的也可以访问

2. 外类类要访问内部类的成员,必须要通过实例化来进行访问

2.数组和集合的区别

一、数组声明了它容纳的元素的类型,而集合不声明。

二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。

三、数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。

四、数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。

3.ArrayList和LinkedList的区别:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

(这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于 LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList.)

4. set集合中数据特点?遍历集合的方式有?

唯一,并且无序,不能存储重复的数据,并且存入的顺序和取出的顺序不是一致的。

1. 普通的for循环,可以把循环变量i作业下标来使用,支持在循环集合的同时,还可以对集合中的元素进行增删改查操作

2. 迭代器:使用迭代器遍历集合的同时,不能直接操作原集合数据,只能使用自身的方法来对集合中的数据进行操作

3. 增强for循环,遍历:只能够遍历集合中的元素,遍历的同时不能对它进行remove和add操作

5.Map集合的特点?JDK1.8后hashMap底层有什么变化?

它里面存储的也是Object类型的数据,键和值的类型都是Object类型,键是唯一的,值是不唯一的(值是可以重复的)

存储进来的数据,键是无序的,键也是唯一的。

键如果重复了,就会出现后来的值把前面的值覆盖,相当于是修改的作用。

6.hashtable和hashmap的区别:

1. 线程不同,一个线程安全(hashtable),一个线程不安全(hashmap)

2. hashtable,不可以null键null值,而hashmap是支持null键null值的。

3. hashmap使用的频率要更多一些。

7. 说出ArrayList,Vector, LinkedList的存储性能和特性

1、随机访问能力

8. ArrayList和Vector底层为数组结构,它们都允许直接按序号索引元素,访问数据的速度非常快

9. LinkedList底层为双向链表的结构,但是链表的存储方式与数组的连续存储方式相比,内存的利用率更高,访问数据相对于ArrayList低

10. 2、插入、删除数据效率

11. ArrayList和Vector插入和删除元素要涉及到数组元素移动等内存的操作,所以效率比较低下

12. LinkedList插入数据时只需要记录本项的前后项即可,速度非常快

13. 3、遍历数据效率

14. ArrayList>Vector>LinkedList

15. 4、线程安全/非安全

16. ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

二.编程题

题目一:需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。

代码语言:javascript
复制
package com.yueqian.day15TreeSet;

 

import java.util.Scanner;

import java.util.TreeSet;

 

class Student{

   private String name;

   private int ChineseScore;

   private int MathScore;

   private int EnglishScore;

   public Student(){}

 

   public Student(String name, int chineseScore, int mathScore, intenglishScore) {

       this.name = name;

       ChineseScore = chineseScore;

       MathScore = mathScore;

       EnglishScore = englishScore;

    }

 

   public String getName() {

       return name;

    }

 

   public void setName(String name) {

       this.name = name;

    }

 

   public int getChineseScore() {

       return ChineseScore;

    }

 

   public void setChineseScore(int chineseScore) {

       ChineseScore = chineseScore;

    }

 

   public int getMathScore() {

       return MathScore;

    }

 

   public void setMathScore(int mathScore) {

       MathScore = mathScore;

    }

 

   public int getEnglishScore() {

       return EnglishScore;

    }

   //计算总分

   public int getCount(){

       return ChineseScore+MathScore+EnglishScore;

}

   public void setEnglishScore(int englishScore) {

       EnglishScore = englishScore;

    }

 

   @Override

   public String toString() {

       return "Student{" +

                "name='" + name +'\'' +

                ", ChineseScore=" +ChineseScore +

                ", MathScore=" +MathScore +

                ", EnglishScore=" +EnglishScore + '\''+",Count="+getCount()+

                '}';

    }

}

public class hw_1 {

   public static void main(String[] args) {

       /**

        * 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),

        * 按照总分从高到低输出到控制台。

        */

       //取消重复录入机制,允许总分相同

       TreeSet<Student> stu=new TreeSet<>((o1,o2)->{

           if (o1.getName().equals(o2.getName()) &&o1.getChineseScore()==o2.getChineseScore()&&

           o1.getMathScore()==o2.getMathScore()&&o1.getEnglishScore()==o2.getEnglishScore()){

                return 0;

           }

           if (o1.getCount()>o2.getCount()){

                return -1;

           }else

                return 1;

        });

       System.out.println("请录入五名学生成绩:");

       Scanner sc=new Scanner(System.in);

       while (stu.size()<5){

          Student s=new Student();

          System.out.print("请输入第"+(stu.size()+1)+"个学生姓名:");

          s.setName(sc.next());

          System.out.print("请输入第"+(stu.size()+1)+"个学生语文成绩:");

          s.setChineseScore(sc.nextInt());

          System.out.print("请输入第"+(stu.size()+1)+"个学生数学成绩:");

          s.setMathScore(sc.nextInt());

          System.out.print("请输入第"+(stu.size()+1)+"个学生英语成绩:");

          s.setEnglishScore(sc.nextInt());

           int FirstSize=stu.size();

          stu.add(s);

           int endSize=stu.size();

          if (FirstSize==endSize){

               System.out.println("重复成绩录入失败,请重新录入第"+(FirstSize+1)+"学生成绩");

          }

       }

       stu.forEach(System.out::println);

    }

}

 

 

题目四:使用Map接口的实现类完成员工工资(姓名--工资)的摸拟:

1)添加几条信息

2)列出所有的员工姓名

3列出所有员工姓名及其工资

4)删除名叫“Tom”的员工信息

5)输出Jack的工资,并将其工资加1000元(通过取值实现)

6)将所有工资低于1000元的员工的工资上涨20%(通过取值实现)

代码语言:javascript
复制
public class MapTest {

   public static void main(String[] args) {

       Map<String,Double> map = new HashMap<String,Double>();

       //1.添加数据

       System.out.println("1.添加数据");

        map.put("Tom",1200.0);

       map.put("Jack",1800.0);

       map.put("Rose",500.0);

       map.put("Mike",400.0);

       map.put("Sale",2100.0);

       map.forEach((s, d) -> System.out.println("姓名:"+s+",工资:"+d));

 

       //2.获取所有的员工姓名

       System.out.println("2.获取所有的员工姓名");

       Set<String> keySet = map.keySet();

       keySet.forEach(System.out::println);

 

       //3.列出所有员工姓名及其工资

       System.out.println("3.列出所有员工姓名及其工资");

       for (String s : keySet) {

           System.out.println("姓名:"+s+",工资:"+map.get(s));

       }

 

       //4.删除名叫Tom的员工信息

       System.out.println("4.删除名叫Tom的员工信息");

       map.remove("Tom");

       map.forEach((s, d) -> System.out.println("姓名:"+s+",工资:"+d));

 

       //5.输出Jack的工资,并将其工资加1000元(通过取值实现)

       System.out.println("5.输出Jack的工资,并将其工资加1000元(通过取值实现)");

       double wages = map.get("Jack");

       map.put("Jack",wages+1000);

       System.out.println(wages+"---"+map.get("Jack"));

 

       //6.将所有工资低于1000元的员工的工资上涨20%(通过取值实现)

       System.out.println("6.将所有工资低于1000元的员工的工资上涨20%(通过取值实现)");

       Set<Map.Entry<String, Double>> entries = map.entrySet();

       for (Map.Entry<String, Double> entry : entries) {

           if ( entry.getValue()<1000){

               map.put(entry.getKey(),entry.getValue()*1.2);

           }

       }

       map.forEach((s, d) -> System.out.println("姓名:"+s+",工资:"+d));

    }

}

 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.简答题:
  • 1.内部类根据声明的位置又分为哪两种类型,有什么特点?内部类的访问特点是?
  • 5.Map集合的特点?JDK1.8后hashMap底层有什么变化?
  • 7. 说出ArrayList,Vector, LinkedList的存储性能和特性
  • 二.编程题
  • 题目一:需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。
  • 题目四:使用Map接口的实现类完成员工工资(姓名--工资)的摸拟:
  • 1)添加几条信息
  • 2)列出所有的员工姓名
  • 3列出所有员工姓名及其工资
  • 4)删除名叫“Tom”的员工信息
  • 5)输出Jack的工资,并将其工资加1000元(通过取值实现)
  • 6)将所有工资低于1000元的员工的工资上涨20%(通过取值实现)
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档