【Java】2、集合框架 JCF

*重点:

  • 底层机制(源码)
  • 应用场景

好处:

  • 数组(长度不可改,同一类型,增删不便)
  • 集合(动态保存,多种类型,方便操作)
类型是否允许重复是否有序
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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值