目录
*重点:
- 底层机制(源码)
- 应用场景
好处:
- 数组(长度不可改,同一类型,增删不便)
- 集合(动态保存,多种类型,方便操作)
| 类型 | 是否允许重复 | 是否有序 | |
|---|---|---|---|
| centered 文本居中 | right-aligned 文本居右 | 线程是否安全 | :--------: |

Collection

Collection 常用方法:
- add/addAll
- remove/removeAll
- contains/containsAll
- size
- isEmpty
- clear
Collection 遍历方式:
- iterator 迭代器(hasNext(),next())
Iterator iterator = col.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
}
iterator = col.iterator(); //重置迭代器
- 增强 for 循环(底层是
迭代器,数组可用)
for(Object obj:col){
System.out.println("book:"+ obj);
}
List
特点:有序可重复
ArrayList
ArrayList 的底层是
动态数组 Object[],是线程不安全的
适用:频繁查询、遍历(可以通过索引快速访问元素)
源码(扩容机制)
int newCapacity = oldCapacity + (oldCapacity >> 1);
System.arraycopy() 和 Arrays.copyOf()方法
LinkedList
LinkedList 的底层是
双向链表,是线程不安全的
适用:频繁进行插入和删除操作
源码(增删)


Set
HashSet
HashSet 的底层是
HashMap,是线程不安全的
适用:
源码
HashSet 使用哈希函数来计算每个对象的哈希码(hash code),然后根据这个哈希码决定对象应该存放在哈希表的哪个位置。当两个不同的对象具有相同的哈希码时(称为哈希冲突),HashSet 会通过调用对象的 equals() 方法来进一步判断它们是否相等。只有当两个对象的哈希码相同且 equals() 方法返回 true 时,才会认为它们是相同的对象,从而避免重复添加。
LinkedHashSet
TreeSet
同
TreeMap,底层是红黑树
Comparator
Map

HashMap

源码
底层是
[数组+链表+红黑树],是线程不安全的,扩容机制同HashSet,默认初始容量为16,默认加载因子为0.75
// 哈希码优化
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
常用方法
- put
- get
- remove
- 遍历方法
- key-value:增强for、迭代器
- values:map.values()
- EntrySet:map.entrySet()
哈希冲突解决
- 链地址法(Chaining)
- 红黑树
- 动态扩容
- 哈希值优化
HashTable
底层,默认初始容量为11,默认加载因子为0.75,2n+1
是线程安全的
键和值都不能为null
参考:
韩顺平 Java集合专题
https://juejin.cn/post/7092645723623129118
github 源码
小林coding
作图:https://carbon.now.sh/


478

被折叠的 条评论
为什么被折叠?



