java源码阅读体会之ArrayList

1.ArrayList的底层实现是Object[],在内部定义了一个私有的size属性,用来记录ArrayList的长度。

2.ArrayList的默认长度是10。

private static final int DEFAULT_CAPACITY = 10;

3.关于扩容,当list已经满了后,每次扩容之后的大小是原大小的1.5倍。 

 int newCapacity = oldCapacity + (oldCapacity >> 1);

 elementData = Arrays.copyOf(elementData, newCapacity);

 

// 注: >> 1 向右移动意味相当于/2;  << 1 向左移动一位相当于乘以2(java8的新特性)

4.remove(index)方法的时候只会修改size的值,并不会对elementData进行容量的减少。

5.关于 transient 修饰符:当一个类实现了serializable接口,那么在序列化的时候会将所有属性自动的序列化,当加上transient修饰符那将会忽略掉这个属性。

注:我对序列化的理解是后台程序以json的格式返回给前台一个ArrayList集合,这个list编程json的过程就是序列化的过程;之后在网上看见一个解释序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。

6.在理解transient和序列化之后,就想那么ArrayList是如何将数据序列化和反序列化的呢?答案是writeObject方法和readObject方法;这样做的目的是避免elementData中有null数据也会被序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值