Java类集实际上去就是java对数据结构的一种实现;---java.util 1. Collection接口(单个对象保存的最顶层父接口) Collection接口以及其子接口在每次进行数据结构操作时只能对单个对象进行处理; 只定义了存储数据的标准,但是无法区分存储类型。 所以常用的是他的两个子类:List和Set public interface Collection<E> extends Iterable<E> public Iterator<E> iterator();取得集合的迭代器,在JDK1.5之前是写在Collection接口中 interface Iterable 1.1 Collection接口中的核心方法: add(T t):向类集中添加元素 iterator():取得类集的迭代器 1.2.List接口(允许数据重复) 在进行单个集合处理时,优先考虑List接口 List接口中拓展了两个重要方法:get(int index):根据所以下标取得元素;set(int index,E element):根据索引下标更新数据 ***三个子类使用上没有任何区别;区别: { 1.出现版本: ArrayList JDK1.2 Vector JDK1.0 2.调用无参构造初始化策略: ArrayList 在构造方法阶段并不初始化对象数组,在第一次添加元素时才初始化对象数组 Vector 在无参构造执行后将对象数组大小初始化为10 3.扩容策略 ArrayList 扩容变为原来的1.5倍 Vector 扩容为原来的2倍 4.线程安全性 ArrayList 异步处理,性能较高,线程不安全 Vector 同步处理,性能较低(原因,才用在方法上加锁,除了内键锁还可以使用lock),线程安全 (即使要使用线程安全的List,也不用vector) 5.遍历 Vector支持较老的迭代器Enumeration, ArrayList不支持 } { ArrayList 底层采用数组实现 LinkedList 底层采用双向链表 都采用异步实现 } ArrayList 默认数组长度为10 private static final int DEFAULT_CAPACITY = 10; 扩容1.5倍 2.1.1.无参构造 2.1.2.有参构造 int定义初始化容量,用户自定义 2.1.3.有参构造 从某个位置插入某个值 接口能保证参数的统一 List接口想要保存自定义类的对象(contains、remove等方法):需要覆写equals和hushCode方法 可以使用concurrent包提供的工具将ArrayList变为线程安全的集合 重复元素的比较:系统Object和Integer自动覆写了equals和hashCode方法,所以不用重新覆写 equals不一定比较的都是内容,在Object类里equals是用==实现,覆写后比较的才是内容 equals和hushCode成对存在,所以要一块覆写 Vector 默认数组长度10