面试小知识点

1、ArrayList与LinkedList相同点与区别

ArrayList:底层是Object数组,是有顺序的,因此对于查找和修改操作比较快,但对于插入或删除操作就比较慢,在指定位置插入(包括扩容)或删除元素,需要挪动后面的元素。
LinkedList:底层是双向链表,可以在链表尾添加元素,对于插入与删除操作比较快,只需要修改指针指向,但是对于查询与修改因为要遍历链表,所以相对较慢。
相同点:(1)都是线程非安全的,不过可以通过Collections.SynchronizedList()包装成线程安全的集合,(2)迭代时有即时失败机制,(3)都是有顺序的 ,(4)元素值允许为null。

2、HashMap与TreeMap相同点与区别?

HashMap:底层基于key、value的entry对象数组,hash冲突采用链表解决,查找使用hashcode和equals方法,遍历随机的
Treemap:底层基于红黑树实现,排序的,equals比较,遍历是排序的
相同点:线程非安全,可以使用Collections.synchronizedMap()包装成线程安全的集合。

3、HashSet与TreeSet 的区别?

HashSet:基于HashMap实现,元素不可重复,
TreeSet:基于TreeMap实现,有序的,不可重复的,
相同点:线程非安全的,同样可以使用Collections.synchronizedSet()包装成线程安全集合。

4、其它集合

Hash Table:与HashMap比,主要区别在于Hashtable线程安全和不允许为null
vector:与ArrayList相比,主要区别在于线程安全,和扩容机制不同

5、HashTable扩容机制

1、当添加元素时,首先计算key的hash值和对应的下标,如果对应位置链表有相同key则用新的value替换原来的;return
2、否则addentry添加该对象,如果大小超过阈值且对应的数组位置不为null则调用resize扩容
3、resize会创建一个大小为原来两倍的新的对象数组,并使用transfer把原来数组元素复制到新的数组中,修改阈值等情况
添加元素。

猜你喜欢

转载自blog.csdn.net/qq_26564827/article/details/81634305
今日推荐