1、ArrayList概述
基于数组实现的,是一个动态动态数组,其容量能自动增长,动态增加内存
线程不安全,只能在单线程环境下, 多线程可以采用Collections.synchronizedList(list)返回一个线程安全的ArrayList类,也可以使用并发包下的CopyOnWriteArrayList类。
他实现了序列化接口,所以能够序列化,还实现了RandomAccess接口,支持快速随机访问,支持快速随机访问,能通过下标序号进行快速访问,实现类Cloneable接口,能被克隆
每个ArrayList实例都有一个容量,用来指定存储列表元素的数组的大小,并且至少等于列表的大小
2、ArrayList的实现
实现List接口、底层使用数组保存所有元素,其实操作都是对数组的操作。
2.1.私有属性
//elementData存储ArrayList内的元素 transient Object[] elementData;
//size 表示它包含的元素的数量 int size;
-
关键字 transient
-
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,此时我们用serialization来保存它,为了在一个特定对象的一个域上关闭serialization,此时就可以在这个域前加上关键字:transient
例子
public class UserInfo implements Serializable {
private static final long serialVersionUID = 996890129747019948L;
private String name;
private transient String psw;
public UserInfo(String name, String psw) {
this.name = name;
this.psw = psw;
}
public String toString() {
return "name=" + name + ", psw=" + psw;
}
}
public class TestTransient {
public static void main(String[] args) {
UserInfo userInfo = new UserInfo("张三", "123456");
System.out.println(userInfo);
try {
// 序列化,被设置为transient的属性没有被序列化
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(
"UserInfo.out"));
o.writeObject(userInfo);
o.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
try {
// 重新读取内容
ObjectInputStream in =