java集合类关系图如下图所示:
collection中包括了List和Set,map是另一个抽象类。
- 如何遍历Collection中的每一个元素?
不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
- list接口
LinkedeList:双向链表实现的,具有链表的优点。扩容容易。允许null元素。提供在头部尾部添加数据的方法,适合实现栈和队列。注意:不提供同步的方法,线程不安全。
ArrayList:类似数组实现,可变大小的数组,具有数组的优缺点(访问快,修改慢;不易扩容)。允许null。非同步,线程不安全。
Vector:向量,非常类似ArrayList,但是是线程安全的。
Stack:继承自Vector,实现了一个后进先出的栈。
- set接口
不包含重复元素的接口
- Map接口
Hashtable:Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。添加数据和取出数据的时间为常数。Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。load factor--负载容量。hashtable是同步的,线程安全的。
HashMap:HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。
WeakHashMap:一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。