java 集合常见面试题

1、HashMap 和 HashTable 区别

(1) 线程安全性不同
HashMap 是线程不安全的,HashTable 是线程安全的,其中的方法是 Synchronize 的,在多线程并发的情况下,可以直接使用 HashTable,但是使用 HashMap 时必须自己增加同步处理。

(2) 是否提供 contains 方法
HashMap 只有 containsValue 和 containsKey 方法。HashTable 有 contains、containsKey 和 containsValue 三个方法,其中 contains 和 containsValue方法功能相同。

(3) key 和 value 是否允许 null 值
Hashtable 中,key 和 value 都不允许出现 null 值。HashMap 中,null 可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为 null。

(4) 数组初始化和扩容机制
HashTable 在不指定容量的情况下的默认容量为 11,而 HashMap 为 16,Hashtable 不要求底层数组的容量一定要为 2 的整数次幂,而 HashMap 则要求一定为 2 的整数次幂。Hashtable 扩容时,将容量变为原来的 2 倍加 1,而 HashMap 扩容时,将容量变为原来的 2 倍。

2、TreeSet 和 HashSet 区别

HashSet 是采用 hash 表来实现的。其中的元素没有按顺序排列,add()、remove() 以及 contains() 等方法都是复杂度为 O(1) 的方法。

TreeSet 是采用树结构实现(红黑树)。元素是按顺序进行排列,add()、remove()以及 contains()等方法都是复杂度为 O(log(n)) 的方法。它还提供了一些方法来处理排序的 set,first(),last() 等。

3、List 的题

java 集合常见面试题

4、ArrayList 大小

java 集合常见面试题

5、ArrayList 扩容过程

java 集合常见面试题