Java Collections Framework

JAVA 2简化集合框架图

 

Java Collections Framework_第1张图片

(虚线框为接口,实线框为类)

 

1. Collection接口 :“Collection层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection。想要尽可能以常规方式处理一组元素时,就使用这一接口。”

Java Collections Framework_第2张图片

 

2. Iterator接口

  (1) boolean hasNext(): 判断是否存在另一个可访问的元素。

  (2) Object next():返回要访问的下一个元素。如果到达集合结尾,则抛出NoSuchElementException异常。

  (3) void remove():删除上次访问返回的对象。本方法必须紧跟在一个元素的访问后执行。如果上次访问后集合已被修改,方法将抛出IllegalStateException。

  “迭代器是 故障快速修复(fail-fast)的。这意味着,当另一个线程修改底层集合的时候,如果您正在用 Iterator 遍历集合,那么,Iterator就会抛出 ConcurrentModificationException 异常并立刻失败。”

 

  (4)接口ListIterator:继承 Iterator 接口,支持添加或更改底层集合中的元素,还支持双向访问。

 

3. List接口 :继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。(这里的有序并不是指升序或者降序的有序,主要是指可以面向位置进行操作)

Java Collections Framework_第3张图片

 

4. Set接口 :继承 Collection 接口,不允许集合中存在重复项,每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。

 

5. Map接口 :Map接口不是Collection接口的继承。Map接口用于维护键/值对(key/value pairs)。该接口描述了从不重复的键到值的映射。

Java Collections Framework_第4张图片

  (1) "键和值都可以为null。但是不能把Map作为一个键或值添加给自身。"

  (2) 视图操作

    i. Set keySet():返回映像中所有关键字的视图集

      "因为映射中键的集合必须是唯一的,您用Set支持。你还可以从视图中删除元素,同时,关键字和它相关的值将从源映像中被删除,但是你不能添加任何元素。"

    ii. Collection values():返回映像中所有值的视图集

      "因为映射中值的集合不是唯一的,您用Collection支持。你还可以从视图中删除元素,同时,值和它的关键字将从源映像中被删除,但是你不能添加任何元素。"

    iii. Set entrySet():返回Map.Entry对象的视图集,即映像中的关键字/值对

      "因为映射是唯一的,您用Set支持。你还可以从视图中删除元素,同时,这些元素将从源映像中被删除,但是你不能添加任何元素。"

 

  (3) Map.Entry接口:Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。

  "通过这个集合(即entrySet方法返回的set)的迭代器,您可以获得每一个条目(唯一获取方式)的键或值,并对值进行更改。当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的条目的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。"

 

6. SortedSet接口和SortedMap接口

  SortedSet:继承Set,它保持元素的有序顺序。

  SortedMap:继承Map,它用来保持键的有序顺序。

 

  "SortedSet接口为集的视图(子集)和它的两端(即头和尾)提供了访问方法。当您处理列表的子集时,更改视图会反映到源集。此外,更改源集也会反映在子集上。发生这种情况的原因在于视图由两端的元素而不是下标元素指定。如果您想要一个特殊的高端元素(toElement)在子集中,您必须找到下一个元素。"

  "除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet一样。"

 

  "添加到SortedSet实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeSet类是它的唯一一份实现。"

  "添加到SortedMap实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeMap类是它的唯一一份实现。"

 

  Java Collections Framework_第5张图片   Java Collections Framework_第6张图片

 

7. TreeSet类和TreeMap类 :分别实现SortedSet接口和SortedMap接口,并继承AbstractSet和AbstractMap

   HashSet类和TreeSet类 :分别实现Set接口和SortedSet接口,都继承AbstractSet

   HashMap类和TreeMap类 :分别实现Map接口和SortedMap接口,都继承AbstractMap

 

8. ArrayList类和LinkedList类

  “List 两种常规的实现:ArrayList 和 LinkedList。使用两种 List 实现的哪一种取决于您特定的需要。如果要支持随机访问,而不必在除尾部的任何位置插入或除去元素,那么,ArrayList 提供了可选的集合。但如果,您要频繁的从列表的中间位置添加和除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。”

 

 

9. ArrayList与Vector

   ArrayList不是线程安全的,而Vector是同步的

 

 

10. HashMap与HashTable

   (1)HashTable是同步的,HashMap不同步

   (2)HashMap的键/值都可以为null,而HashTable的键值不能为null

 

 

java2集合框架图:

Java Collections Framework_第7张图片

 

 

http://www.javaeye.com/topic/164753

 

你可能感兴趣的:(java,vector,list,HashMap,Collections,iterator)