前言
因为是面向面试题,所以我们直接指向热点面试题。
一、常见的集合底层实现
ArrayList数据结构是数组。
LinkedList数据结构是双向链表。
HashMap底层与HashTable原理相同,Java 8版本以后如果链表长度大于8则链表变成红黑树。
HashTable底层是链地址法组成的哈希表(即数组+单项链表组成)。
HashSet底层是HashMap。
LinkedHashMap底层修改自HashMap,包含一个维护插入顺序的双向链表。
TreeMap底层是红黑树。
LinkedHashSet底层是LinkedHashMap。
TreeSet底层是TreeMap。
二、list、set、map的区别。
list和set是存储单列数据的集合,map是存储键值对这样双列数据的集合。
list中存储的数据是有序并且可重复的。set存储的数据是无序且不重复的。
map中存储数据是没有顺序的,key不重复value是可以重复的。
三、谈一下hashMap什么时候扩容,resize的实现
在hashMap中有数组table,当table的size达到阈值时进行扩容。
扩容需要重新分配一个新数组,新数组是旧数组的两倍,然后遍历旧数组,将旧数组的hash分配到新数组中去。