集合框架包括集合、映射、迭代器、数组以及一些遗留类(Vector、Stack、HashTable、Properties)和接口Dictionary,
所有的遗留接口都是同步的也就是线程安全的,所有的集合类都是不同步的。
1、集合类
Collection是所有集合的顶层接口,List接口和Set接口继承自Collection。
Map接口不继承自Collection,但是通过values()方法可以得到Collection对象。
Collection可以通过toArray()转化为数组。
Collection可以通过iterator()返回一个指向该集合的迭代器。
List把集合的行为生命成存储一个序列,使用从0开始的索引,可以把一个元素插入到列表里或访问列表中的某个元素,允许值的重复。
Set不允许值的重复。
AbstractCollection提供了Collection的基本实现。
AbstractList继承自AbstractCollection,实现List接口,并提供基本的List的实现。
AbstractSet继承自AbstractCollection,实现Set接口,并提供基本的Set的实现。
AbstractSequentialList扩展AbstractList来实现集合元素的顺序访问。
ArrayList继承自AbstractList,实现List接口,支持按需要增长的动态数组,可以用一个初始长度来创建,在长度超过时自动变大,在删除时自动变小。但是再分配是很耗时的系统操作,可以通过ensureCapacity(int capacity)手工变大数组容量,来改善,其中capacity是要再分配的容量。
LinkedList继承自AbstractSequentialList,实现链表。
HashSet继承自AbstractSet,创建一个用散列表存储元素的集合,可以保证不管集合多大,基本操作(add、remove、size)等的执行时间不变。
TreeSet扩展AbstractSet,实现树型的有序集合;集合中的元素按升序存储;访问和便利的速度很快,一般用来存储大量有序数据并快速查找。
LinkedHashSet继承自HashSet,是一个用元素的插入顺序来维持集合的链表,并允许按照元素的插入顺序遍历集合;在使用迭代器访问LinkedHashSet集合时,元素将按照他们的插入顺序返回。
2、映射
映射是存储关键字-值对的对象,可以通过给定的关键字查到到他对应的值;其中关键字和值都可以是对象;关键字必须是唯一的,但是值是可以重复的;映射不是集合,不实现Collection接口;但是可以通过KeySet()方法得到关键字的集合,或通过values()得到值的集合。
Map接口是所有映射的顶层接口。
SortedMap接口扩展Map接口,保证按关键字的升序存储值对;
AbstractMap提供基本的Map的实现,是所有映射实现的父类。
HashMap使用散列表来实现Map接口,可以保证不管集合多大,基本操作(get、put)等的执行时间不变;但是不能保证元素的顺序;容量可以动态地增长,增长率可以通过构造方法HashMap(int capacity, float fillRatio)来设定,其中fillRatio就是增长率。
TreeMap提供了按序存储值对的方式,并且允许快速查找,并能保证集合元素按照关键字的升序排列。
LinkedHashMap扩展HashMap,按照元素的插入顺序维护映射中的元素链表,循环访问时,元素将按照他们的插入顺序返回。
3、数组
Arrays提供了许多数组处理方法,可以用来连接集合和数组。
asList()返回一个由操作数组支持的列表,列表和数组指向同一个地方。
sort()对一个数组进行排序,使该数组最后按升序排列。
4、遗留类
Vector是同步的,可以动态增长,可以通过vector(int size, int incr)指定增量(incr),如果没有指定增量,在每次分配内存时将加倍;Java2的Vector实现了List接口,并提供了对迭代器的支持,可以向使用list一样使用Vector。
Stack继承自Vector,使先进后出的堆栈。
Dictionary是一个关键字-值对存储的抽象类,操作与映射类似,但是现在这个类已经被映射取代。
HashTable是Dictionary的子类,但是在Java2中改进,并实现Map接口,与HashMap类似,区别在于HashTable是同步的,HashMap是不同步的;容量也可以自动增长,通过HashTable(int size, float fillRatio)指定填充率,如果没有指定,填充率默认为0.75。
Properties是HashTable的子类。