Java 第一阶段各种扩容

 StringBuilder/StringBuffer

1. 封装了char[]数组

2. 是可变的字符序列

3. 提供了一组可以对字符内容修改的方法

4. 常用append()来代替字符串做字符串连接”+”

5. 内部字符数组默认初始容量是16:super(str.length() + 16);

6. 如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。int newCapacity = value.length * 2 + 2;

7.StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全

ArrayList

内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长

ArrayList() 构造一个初始容量为10的空序列

       源码摘抄:int newCapacity = oldCapacity + (oldCapacity >> 1);

       解释:数组的新容量 = 旧容量/2的一次方 --相当于原来的1.5倍扩容

ArrayList相当于在没指定initialCapacity时就是会使用延迟分配对象数组空间,当第一次插入元素时才分配10(默认)个对象空间。假如有20个数据需要添加,那么会分别在第一次的时候,将ArrayList的容量变为10;之后扩容会按照1.5倍增长。也就是当添加第11个数据的时候,Arraylist继续扩容变为10*1.5=15;当添加第16个数据时,继续扩容变为15 * 1.5 =22个

 Map接口

Map的初始容量是16,默认的加载因子是0.75

tatic final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

初始容量1<<4,相当于1*(2^4),也就是16

static final float DEFAULT_LOAD_FACTOR = 0.75f;

默认的加载因子是0.75f,也就是存到75%开始扩容,按照2的次幂进行扩容

成长因子:

static final float DEFAULT_LOAD_FACTOR = 0.75f;

前面的讲述已经发现,当你空间只有仅仅为10的时候是很容易造成2个对象的hashcode 所对应的地址是一个位置的情况。这样就造成 2个 对象会形成散列桶(链表)。这时就有一个加载因子的参数,值默认为0.75 ,如果你hashmap的 空间有 100那么当你插入了75个元素的时候 hashmap就需要扩容了,不然的话会形成很长的散列桶结构,对于查询和插入都会增加时间,因为它要一个一个的equals比较。但又不能让加载因子很小,如0.01,这样显然是不合适的,频繁扩容会大大消耗你的内存。这时就存在着一个平衡,jdk中默认是0.75,当然负载因子可以根据自己的实际情况进行调整。

转载:CSDN        程序媛 泡泡的笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值