感谢牛客网网友提供的面试经验!
1. 集合常用的有哪几种?
从map,list,set三大接口下分类别回答
- map接口下的:
- HashMap(首先想起最常用的hashmap,无序,线程不安全,底层是数组加链表加红黑树),
- HashTable(然后想起线程安全的hashtable),
- HashTree(然后想起有序的hashtree,底层是红黑树),
- LinkedHashMap(然后想起有序的hashtree,底层是红黑树),
- ConcurrentHashMap(然后想起有序的hashtree,底层是双向链表加数组加链表加红黑树,线程安全)
ConcurrentHashMap结合了HashMap和Hashtable二者的优势
- List接口下的:
- ArrayList(底层为数组的arraylist,线程不安全),
- LinkedList(底层为链表的的LinkedList,线程不安全),
- Stack(常用的栈,继承自Vector,底层是通过数组实现的,线程安全)
- Vector(,底层是通过数组实现的,线程安全)
- Set接口下的:
- HashSet(HashSet底层使用了Hash表实现),
- TreeSet(TreeSet底层使用了红黑树来实现),
- LinkedHashSet( LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现)
2. 集合里哪些是线程安全的?
vector, stack, hashtable,ConcurrentHashMap。
3. list,set有什么区别?
最主要的区别,list包含重复元素,set不包含重复元素。
4. HashMap, HashTable有什么区别?
最主要的区别,HashMap是线程不安全的,HashTable是线程安全的;另外,HashMap内的key和value允许为空,HashTable的key和value不允许为空
5. ArrayList,LinkedList有什么区别?
ArrayList底层是数组,方便查找,不方便增加删除元素。LinkedList底层是链表,方便增删,但是查找不方便。
从名字可以推想出底层
从底层可以推想出其特点
6. HashSet,TreeSet是怎么保证元素唯一性的?
保证元素唯一性的原理:HashSet判断元素的hashCode值是否相同。如果相同,还会继续判断元素的equals方法,是否为true。TreeSet底层保证元素唯一性是通过Comparable或者Comparator接口实现。