java容器List和set的分析

Posted on 2008-12-17 11:06 angelspider 阅读(884) 评论(0)  编辑  收藏
 

 

     容器类可以大大提高编程效率和编程能力,在Java2中,所有之容器都由SUN公司之JoshuaBloch进行了重新设计,丰富了容器类库之功能。

 

Java2容器类类库之用途是“保存对象”,它分为两类:

 

 

Collection----一组独立之元素,通常这些元素都服从某种规则。List必须保持元素特定之顺序,而Set不能有重复元素。

 

 

Map----一组成对之“键值对”对象,即其元素是成对之对象,最典型之应用就是数据字典,并且还有其它广泛之应用。另外,Map可以返回其所有键组成之Set和其所有值组成之Collection,或其键值对组成之Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对之每个“值”是一个Map即可。

1.迭代器

 

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中之对象,而开发人员不需要了解该序列之底层结构。迭代器通常被称为“轻量级”对象,因为创建它之代价小。

Java中之Iterator功能比较简单,并且只能单向移动:

 

(1)使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator之next()方法时,它返回序列之第一个元素。

 

 

(2)使用next()获得序列中之下一个元素。

 

(3)使用hasNext()检查序列中是否还有元素。

 

(4)使用remove()将迭代器新返回之元素删除。

 

Iterator是Java迭代器最简单之实现,为List设计之ListIterator具有更多之功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

2.List之功能方法

 

List(interface):次序是List最重要之特点;它确保维护元素特定之顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。

 

 

ArrayList:由数组实现之List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素之速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。

 

LinkedList:对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

 

 

3.Set之功能方法

 

 

Set(interface):存入Set之每个元素必须是唯一之,因为Set不保存重复元素。加入Set之Object必须定义equals()方法以确保对象之唯一性。Set与Collection有完全一样之接口。Set接口不保证维护元素之次序。

HashSet:为快速查找而设计之Set。存入HashSet之对象必须定义hashCode()。

TreeSet:保持次序之Set,底层为树结构。使用它可以从Set中提取有序之序列。

 

 

LinkedHashSet:具有HashSet之查询速度,且内部使用链表维护元素之顺序(插入之次序)。于是在使用迭代器遍历Set时,结果会按元素插入之次序显示。

HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计之;TreeSet采用红黑树之数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素之次序,使得看起来元素是以插入之顺序保存之。需要注意之是,生成自己之类时,Set需要维护元素之存储顺序,因此要实现Comparable接口并定义compareTo()方法。


只有注册用户登录后才能发表评论。


网站导航: