标签:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
│
└Queue
Map
├Hashtable
├HashMap
├SortedMap
├EnumMap
└WeakHashMap
Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,
Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于 创建一个空的Collection,有一个 Collection参数的构造函数用于创建
一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后 一个构造函数允许用户复制一个Collection。
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问
Collection中每一个元素。典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
由Collection接口派生的两个接口是List和Set。
接口 | 实现 | 历史集合类 |
Set |
HashSet |
|
TreeSet |
||
List |
ArrayList |
Vector |
LinkedList |
Stack |
|
Map |
HashMap |
Hashtable |
TreeMap |
Properties |
Set接口同样是Collection接口的一个子接口,它表示数学意义上的集合概念。Set中不包含重复的元素,即Set中不存两个这样的元素e1和e2,使得e1.equals(e2)为true。由于Set接口提供的数据结构是数学意义上集合概念的抽象,因此它需要支持对象的添加、删除,而不需提供随机访问。故Set接口与Collection的接口相同,在此对里面的方法不作介绍。
HashSet 类和 TreeSet 类
“集合框架”支持 Set
接口两种普通的实现:HashSet
和TreeSet
。在更多情况下,您会使用 HashSet
存储重复自由的集合。考虑到效率,添加到 HashSet
的对象需要采用恰当分配散列码的方式来实现hashCode()
方法。虽然大多数系统类覆盖了 Object
中缺省的hashCode()
实现,但创建您自己的要添加到 HashSet
的类时,别忘了覆盖 hashCode()
。当您要从集合中以有序的方式抽取元素时,TreeSet
实现会有用处。为了能顺利进行,添加到TreeSet
的元素必须是可排序的。 “集合框架”添加对 Comparable
元素的支持,在排序的“可比较的接口”部分中会详细介绍。我们暂且假定一棵树知道如何保持java.lang
包装程序器类元素的有序状态。一般说来,先把元素添加到 HashSet
,再把集合转换为TreeSet
来进行有序遍历会更快。
为优化 HashSet
空间的使用,您可以调优初始容量和负载因子。TreeSet
不包含调优选项,因为树总是平衡的,保证了插入、删除、查询的性能为log(n)
。
HashSet
和 TreeSet
都实现 Cloneable
接口。
List
接口继承了 Collection
接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
与 set 不同,列表通常允许重复的元素。更正式地说,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。难免有人希望通过在用户尝试插入重复元素时抛出运行时异常的方法来禁止重复的列表,但我们希望这种用法越少越好。
Linked 改快读慢
Array 读快改慢
Hash 两都之间
Collection是集合接口
|————Set子接口:无序,不允许重复。
|————List子接口:有序,可以有重复元素。
区别:Collections是集合类
Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
Set和List具体子类:
Set
|————HashSet:以哈希表的形式存放元素,插入删除速度很快。
List
|————ArrayList:动态数组
|————LinkedList:链表、队列、堆栈。
Array和java.util.Vector
Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用
标签:
原文地址:http://www.cnblogs.com/kouhao/p/5901000.html