Java - 集合、Map 相关

集合相关

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 遍历顺序决定有序
posted @ 2019-12-31 14:51  小菠萝测试笔记  阅读(797)  评论(0编辑  收藏  举报