保持好心态,活到老,学到老。

导航

java collection

java collection位于java.util包中,其主要的接口和类的结构如下图所示:

1.Collection接口是最上层的根,它是所有collection相关的接口和类的祖先。

2.List

List也是一个接口。API的定义:有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。

ArrayList<E>,LinkedList<E>

这2个类都是继承自List.从外层看,它们都是提供可重复的有序列表。但是它们的差别在于底层实现。

ArrayList<E>:List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。可见它是用数组来存放元素的,元素是按顺序存放的。而且它的数组是可变长度的,随着元素的增加,数组长度会成倍增加。

LinkedList<E>: List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。可见它的底层实现是链表。

数组和链表的区别,我们学数据结构都知道,当插入数据的时候,数组需要移动插入位置以后的所有元素,而链表只需要改变上下元素的指针,所以链表性能要好;而对于遍历元素,由于数组元素顺序存放,所以要快。这个区别,有助于我们根据具体的场景决定到底使用ArrayList还是LinkedList.

3.Set

Set接口,一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

HashSet.此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。这个类可存不重复的元素,但是顺序可能变化,而且Set类族没有List那样的get(int index)这样的接口,只能通过Iterator来遍历元素,元素顺序可变,就是指Iterator出来的顺序,随着增加或者删除元素,可能发生变化。

SortedSet & TreeSet

SortedSet是一个接口,它提供关于元素的总体排序 的 Set。这些元素使用其自然顺序进行排序,或者根据通常在创建有序 set 时提供的 Comparator 进行排序。该 set 的迭代器将按元素升序遍历 set。TreeSet是它的一个实现类。所谓的自然排序,也就是看元素是否实现了Comparable<T>接口,比如元素是string的,string是实现了Comparable<T>接口的,所以它就按这个实现顺序存放(默认升序)的。如果元素是某个新加的类的对象,并且这个类也没有显式的实现Comparable<T>接口,那么看根类Object是怎么排序的?这个实际是不能添加进SortedSet的,会报异常。

4. Map

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

HashMap. 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

SortedMap & TreeMap

SortedMap是一个接口,进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的 Comparator 进行排序。

TreeMap是它的一个实现,基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

posted on 2014-11-18 15:16  保持好心态,活到老,学到老。  阅读(145)  评论(0)    收藏  举报