Java Arraylist实现原理.

嗯,,深入了解下关于底层的实现原理。

首先 数组是这样的。

private transient Object[] elementData;  

私有,不可序列化,Object。为什么要用transient修饰呢。因为容器的实际设计大小是比原来的大的。比如数组大小是8,容易可能设计成8*1.5=12。所以这样要是被序列化的话就会多浪费四个空间。当数组大小变大就会浪费更多的控件。所以设计者加入transient,使其不可被序列化。并且在WriteObject中将其手动序列化。

代码如下

private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException{
	// Write out element count, and any hidden stuff
	int expectedModCount = modCount;
	s.defaultWriteObject();

        // Write out array length
        s.writeInt(elementData.length);

	// Write out all elements in the proper order.
	for (int i=0; i<size; i++)
            s.writeObject(elementData[i]);

	if (modCount != expectedModCount) {
            throw new ConcurrentModificationException();
        }

    }
可以看出是size而不是elements.length。说明只序列化数组大小的空间。避免了空间的浪费。
http://blog.csdn.net/jzhf2012/article/details/8540410 具体看这篇 (逃


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值