ArrayList浅析

arrayList作为一个可扩容的数组,是我们常用的一个类。主要详谈以下几点:扩容,方法的使用;

Serilizable接口的实现

  • arrayList是实现序列化接口的,在网络中进行传输。
  • 对于elementData使用transient关键字修饰的,因为serilizable接口在默认的序列化和反序列化是根据数组的容量来进行的。然而,由于arrayList的扩容机制(如果容量不够则扩容为原来的1.5倍),这样就会造成很多容量大于实际使用量,如果依照默认的序列化和反序列化方式,这样就会造成性能的浪费。因此,在arrayList的源码中,重写了writeObject(),readObject()两个方法,此处的目的为根据实际使用量进行序列化和反序列化,保证性能!!

常见的几个坑

  • c.toArray()的返回值不一定是Object[]数组,这是java的一个BUG;
  • Arrays.asList()方法得到的ArrayList类型的对象是一个内部类对象,没有add()和remove()方法,需要特别注意;
  • 在对ArrayList进行循环操作的时候,由于modcount参数的存在,最好使用迭代器的方式,不然会造成ConcurrentModificationException;

你可能感兴趣的:(ArrayList浅析)