两种特殊的Java容器类List和Set分析
容器类可以大大提高编程效率和编程能力,在java2中,所有的容器都由sun公司的joshua bloch进行了重新设计,丰富了容器类库的功能。
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()方法。
编辑推荐:
温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)
点击加载更多评论>>