〖JAVA学习经验〗两种特殊的Java容器类List和Set分析

容器类可以大大提高编程效率和编程能力,在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()方法。

一起交流学习请访问:Tore_m_1206686_21115_1_1.html”>http://www.shangxueba.com/sTore_m_1206686_21115_1_1.html

悠然享受和大自然融合之乐。

〖JAVA学习经验〗两种特殊的Java容器类List和Set分析

相关文章:

你感兴趣的文章:

标签云: