Java集合中的一些细节

集合

List

  • ArrayList

add()方法可以添加null,而且可以添加多个null

ArrayList底层结构和源码
  1. ArrayList中维护了一个Object类型的数组elementData。

    // transient瞬间的,短暂的 使用transient修饰表示该属性不会被序列化
    transient Object[] elementData;
    
  2. 当创建ArrayList对象时,如果使用的是无参构造方法,则初始elementData容量为0,第一次添加数据,则扩容elementData为10,若需再次扩容,则扩容elementData为1.5倍。

  3. 如果使用的是指定大小的构造方法,则初始elementData容量为指定大小,若需要扩容,则直接雒容elementData为1.5倍

  4. vector默认10,每次扩容2倍

Set

HashSet

Set集合特性与数学中集合特性一致也满足:确定性、互异性、无序性。
因此add()方法只能添加一个null。

HashSet底层是由HashMap实现的,数据存放在map的key中,value则存放的是一个常量PRESENT(= new Object());

第一次添加数据时,table(数组)初始化容量为16,临界值threshold为 16 * 加载因子loadFactor 0.75 = 12

table数组使用到了临界值,就会扩容为原来的一倍

在Java8中,如果一条链表的元素个数达到TREEIFY_THRESHOLD(默认为8),并且table大小 >= MIN_TREEIFY_CAPACITY(64)时会转化为红黑树,但如果链表 > 8而 数组table < 64,则table会继续扩容,不会转为红黑树。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值