List,Set,Map三者的区别?
1.面试题一:你说说collection里面有什么子类?
(其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set)
其实.list和set都是实现了collection接口的
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接口的实现类
- TreeMap是有序的,HashTable和HashMap是无序的.
- HashTable的方法是同步的(Hashtable的所有 public 方法声明中都有synchronized关键字),也就意味着线程安全,HashMap方法不是同步的,所以线程不安全.HashMap效率较高,Hashtable效率较低。
- Hashtable不允许null值,HashMap允许null值(key和value都允许)
- 父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap
- 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来说比较慢