(Map和其他集合)
- 1.构造函数为何不能用abstract, static, final修饰
- 2.什么情况下,方法区中的类才会被回收?
- 3.java静态类、方法和变量,被加载一次后,会保留下来吗,跟常量池一样?再次new静态类对象的时候,是不是就不用加载了?
- 4.super可以引用接口嘛?
- 5.为什么map添加元素用put不用add?
- 6.Map集合类K/V能不能存储null值?
- 7.在map中根据value获取key
- 8.list和set集合可以存空嘛?
- 9.Map集合对象创建的时候,自动创建Entry对象(键值对对象)记录每一对键值对.
- 10.内部接口使用的时候不需要实现嘛,entry的实现类是啥
- 11.自定义类型什么时候重写hashcode和equals方法
- 12.只有linkedlist集合有首尾操作
- 13.hashSet底层是new了一个hashMap
- 14.a.TreeMap底层是一个红黑树结构
- 15.为啥hashtable存null会空指针?
- 16.keySet和entrySet遍历速度区别?
- 17.普通map怎么排序?
- 18.集合可以互相嵌套
- 19.hashmap有没有重写hashcode和equals方法?
- 20.集合框架图
- 21.写代码,写几步先校验一下,再往下写
1.构造函数为何不能用abstract, static, final修饰
不同于方法,构造器不能是abstract, static, final的.
1)构造器不是通过继承得到的,所以没有必要把它声明为final的。
2)同理,一个抽象的构造器将永远不会被实现,所以它也不能声明为abstract的。
3)构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。
2.什么情况下,方法区中的类才会被回收?
1)该类所对应的所有实例对象都已经被回收了,Java堆中已经不存在该类的实例对象了。
2)加载该类的类加载器ClassLoader已经被回收了。
3) 该类的Class对象没有任何引用。
3.java静态类、方法和变量,被加载一次后,会保留下来吗,跟常量池一样?再次new静态类对象的时候,是不是就不用加载了?
静态类是系统启动的时候自动加载,一直保留,直到程序终止。
静态类是对嵌套类使用static关键字。static不能用于最外层的类。静态的嵌套类和其它外层的类别无二致,嵌套只是为了方便打包
静态块就是类加载器加载对象时,要执行的一组语句,静态块只会在类加载到内存中的时候执行一次,保留直到程序被停止。
(在这里感谢两位老师解答)
4.super可以引用接口嘛?
不可以,只能用于有继承关系的父类引用
5.为什么map添加元素用put不用add?
6.Map集合类K/V能不能存储null值?
可以
linkedhashmap key不允许为空
7.在map中根据value获取key
//根据相同value获取多个key
System.out.print("请输入一个您要查找得世界杯冠军的国家:");
String country = sc.nextLine();
//entrySet()方法把map中的每个键值对变成对应成Set集合中的一个对象
Set<Entry<String, String>> set = map.entrySet();
//因为循环获取多个满足相同value值得key值
//如果没有获得过世界杯的国家则会打印循环次数的行数,而return结束函数也会随之出现问题
//我这里用的flag标记,来实现功能
boolean flag = false;
for (Entry<String, String> e : set) {
if (e.getValue().equals(country)) {
System.out.print(e.getKey() + "年 ");
flag = true;
}
}
if (flag == false) {
System.out.println("没有获得过世界杯");
return;
}
8.list和set集合可以存空嘛?
可以
9.Map集合对象创建的时候,自动创建Entry对象(键值对对象)记录每一对键值对.
map.entrySet();
10.内部接口使用的时候不需要实现嘛,entry的实现类是啥
需要实现
hashmap$Node类
11.自定义类型什么时候重写hashcode和equals方法
保证对象数据唯一的时候
1)使用hashset,存储自定义对象为元素
2)使用hashmap ,存储自定义对象为key
12.只有linkedlist集合有首尾操作
linkedhashset和linkedhashmap没有
13.hashSet底层是new了一个hashMap
14.a.TreeMap底层是一个红黑树结构
TreeMap集合自带了一个比较器,里边存储的key是有序的:默认是升序或者可以根据比较器自定义排序规则 和TreeSet是一样
15.为啥hashtable存null会空指针?
Hashtable的源码,如果value=null直接抛出空指针异常;而使用key.hashCode()不允许key=null,所以无论是key还是value都不能是null。而在HashMap中并没有这样的限制,key和value允许使用null。
16.keySet和entrySet遍历速度区别?
entrySet()快,性能好。
1)keySet便利了两次,一次转为Iterator类型,一次从HashMap中取出key对应的value值,
2)entrySet只遍历了一次,他将key和value全部放入entry中。
17.普通map怎么排序?
转为keySet或者entrySet集合再操作
18.集合可以互相嵌套
19.hashmap有没有重写hashcode和equals方法?
在set里存hashmap是唯一的嘛 ?我在hashmap源码里没找到hashcode方法
我在Map里面找到了重写的hashcode