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 的区别?

  1. HashMap实现了Map接口 HashSet实现了Set接口
  2. HashMap存放的是key value键值对,HashSet存放的是对象
  3. HashMap使用put()方法将元素放入map中 HashSet使用add()方法将元素放入set中
  4. HashMap比较快,因为是使用唯一的键来获取对象 => HashSet较HashMap来说比较慢

相关