测试必备之Java知识(三)—— 集合、Map相关

132 阅读2分钟

集合相关

List、Set、Map的区别

类型描述
List允许重复对象,可插入多个null元素,有序
Set不允许重复对象,只允许一个null元素,无序
Map不是collection的子接口或实现类,是一个接口,每个元素都是entry,一个键一个值

Vector、ArrayList、LinkedList的区别

类型描述
Vector动态数组,安全,扩容提高1倍
ArrayList动态数组,不安全,扩容增加50%,初始容量10
LinkedList双向链表,不安全,不需要调整容易

Vector:动态数组,安全,扩容提高1倍

ArrayList:动态数组,不安全,扩容增加50%,初始容量10

LinkedList:双向链表,不安全,不需要调整容易

TreeSet为什么有序

实现了SortedSet接口,还是通过 Comparator  或者 Comparable 维护了一个排序顺序

HashMap方面

HashMap的内部数据结构

底层使用哈希表(链表( O(n) )+数组),若链表长度过长会转成红黑树实现(O(logn))

HashMap小知识点

知识点答案
HashMap初始容量16
HashMap扩容增量原容量的1倍(2的平方)
HashMap调整容量大小的值需要调整容量大小的指定值=当前容量*负载因子
HashMap如何保证随机性通过key的hashCode值,调用hash函数
HashMap的容量为什么是2的倍数因为hash算法的原因,为了最大随机性,让key的hashcode去决定索引值
HashMap的容量为什么是2的倍数hash算法的原因,为了最大随机性,让key的hashcode去决定索引值
HashCode的作用确定对象在哈希表的索引位置
什么是Hash碰撞?当不同key通过hash算法定位键值对存储位置时,两个key会定位到相同位置
如何解决Hash碰撞?链地址(拉链法)法(即链表形式)
HashMap为什么线程不安全Hashmap没有实现锁的机制,1.5之后提供了ConcurrentHashMap高效的线程安全类
HashMap线程不安全的表现会出现更新丢失,存储了B put的值,但是丢失了A put的值

HashTable、HashMap、TreeMap、LinkedHashMap的区别

类型底层数据结构是否同步others
HashTable哈希表Yep不支持null键和null值,无序
HashMap哈希表Yep支持null键和null值,无序
TreeMap红黑树No通过Comparator或实现Comparable接口对键的顺序关系决定有序
LinkedHashMap双向链表No遍历顺序决定有序