快捷搜索:

J2SE综合:两种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()措施。

您可能还会对下面的文章感兴趣: