1. 你说说collection里面有什么子类?
(其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set)
List:有序可重复,可以插入多个null对象。
Set:无序不重复(只允许一个null对象 )。
2. 请说说List,Set,Map三者的区别?
- List:有序可重复,可以插入多个null对象;
- Set:无序不重复(只允许一个null对象 );
- Map不是collection的子接口或者实现类,Map是一个接口,Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。(Map 里你可以拥有随意个 null 值但最多只能有一个 null 键).
3. 请说说HashMap、TreeMap和HashTable的区别?
首先三者都是Map接口的实现类。
1 有序无序
TreeMap是有序的,HashTable和HashMap是无序的。
2 线程安全与否
HashTable的方法是同步的(HashTable的所有 public 方法声明中都有synchronized关键字),也就意味着线程安全。
HashMap方法不是同步的,所以线程不安全。
所以:
HashMap效率较高,HashTable效率较低。
3 允许NULL
HashTable不允许null值,HashMap允许null值(key和value都允许)
4 父类
HashTable的父类是Dictionary,HashMap的父类是AbstractMap。
5 数组大小
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。
HashMap数组大小默认16.而且是2的指数。
在JDK1.8之后,解决哈希冲突,当链表的长度大于8的时候,将链表化为红黑树,减少搜索时间。
4. HashMap 和HashSet 的区别?
HashMap实现了Map接口 HashSet实现了Set接口。
HashMap存放的是key value键值对,HashSet存放的是对象。
HashMap使用put()方法将元素放入map中 HashSet使用add()方法将元素放入set中。
HashMap比较快,因为是使用唯一的键来获取对象 => HashSet较HashMap来说比较慢。
浙公网安备 33010602011771号