“一句话”面试题——java集合

1、List、Set、Map区别
List:存放的元素有序,可重复;List的实现类是LinkedList,ArrayList,Vector
Set:存放的元素无序,不可重复;Set的实现类是HashSet,LinkedHashSet
Map:元素按键值对存放,要求键的唯一性,无顺序;Map的实现类是HashMap,HashTable,LinkedHashMap;Map相当于和Collection一个级别。

2、ArrayList和LinkedList的区别
ArrayList底层是数组,相对读取更快,读取时间复杂度是O(1),但是删除数据的开销却很大,时间复杂度是O(n),因为需要重排数组元素。
LinkedList底层是链表,插入删除更快,时间复杂度是O(1),但是读取的时间复杂度是O(n),LinkedList需要更多的内存。

3、ArrayList和Vector的区别
同步性:Vector是线程安全的,ArrayList是线程不安全的。
数据增长:当需要增长时,Vector默认增长为原来的一倍;ArrayList默认增长为原来的50%。

4、HashMap和HashTable的区别
1、HashMap是非线程安全的,可以接收键值为null,HashTable是线程安全的,不可以接收null值。
2、HashMap的Iterator迭代器是fail-fast迭代器,HashTable的Enumeration迭代器是非fail-fast的。

5、HashMap和CurrentHashMap的区别
1、CurrentHashMap对整个数组实现了分段,而HashMap没有。
2、CurrentHashMap在每个分段上面都使用了锁保护,从而使锁的粒度更精细,并发更好,而HashMap没有使用锁,不是线程安全的。

6、HashMap的工作原理
HashMap是基于hash算法,通过put和get方法来存放和获取对象。当通过put方法存放对象时,使用对象的hashCode()方法计算hash值,找到存放键值对的位置。当通过get方法获取对象时,使用键对象的equals方法找到键值对,然后返回对象。HashMap通过链表来解决Hash碰撞。

猜你喜欢

转载自blog.csdn.net/cool_summer_moon/article/details/80849789