Java 集合(一)框架概述与Collection

  在使用Java语言开发时,绕不开对集合的使用,因此,对集合的掌握是非常有必要的。除此之外,Java的集合框架设计也能看出一些数据结构的设计思想,对开发的进阶是很有帮忙的。本系列文章以JDK1.6为例,介绍下集合框架。

一、集合框架概述

  谈Java集合框架,基本上绕不开一张图,如下:

  从上图可以看出,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等。
  

1.1 Collection继承关系

  用非图表的形式表示Collection主要类之间的关系的话,如下(└代表继承关系):
   |–Collection
   |----└ List
   |--------└ AbstractList
   |----------------└ AbstractSequentialList
   |------------------------------└ LinkedList
   |----------------└ ArrayList
   |----------------└ Vector
   |--------------------└ Stack
   |----└ Set
   |--------└ AbstractSet
   |---------------└ HashSet
   |--------------------└ LinkedHashSet
   |---------------└ TreeSet

1.2 Map继承关系

  用非图表的形式表示Map主要类之间的关系的话,如下(└代表继承关系):
   |–Map
   |----└ AbstractMap
   |------------└ HashMap
   |-------------------└ LinkedHashMap
   |------------└ TreeMap
   |------------└ Hashtable
  1.1和1.2中列出的类或接口只是最常用的一些,用来描述他们之间的继承关系。

二、Collection相关

  Collection相关的类,关注Collection.java和AbstractCollection.java即可。

2.1 Collection

  Collection是集合框架的根接口(interface),定义了不同集合具体实现类都要实现的通用性方法。

2.1.1 Collection接口汇总

方法 作用
public boolean add(E object) 添加元素
public boolean addAll(Collection<? extends E> collection) 添加另一个集合的元素
public void clear() 清空集合
public boolean contains(Object object) 判断是否包含某个元素
public boolean containsAll(Collection<?> collection) 判断是否包含某个集合中的所有元素
public boolean equals(Object object) 比较两个元素是否相等
public int hashCode() 哈希值
public boolean isEmpty() 判断集合是否为空
public Iterator iterator() 返回集合迭代器
public boolean remove(Object object) 清除某个元素
public boolean removeAll(Collection<?> collection) 清除某个集合中的所有元素
public boolean retainAll(Collection<?> collection) 判断两个集合是否存在并集
public int size() 返回集合中的元素个数
public Object[ ] toArray() 将集合转化为数组
public T[ ] toArray(T[] array) 将集合转化为数组

2.1.2 Collection接口详述

   1、public boolean add(E object)
    添加指定的元素。如果此 collection 由于调用而发生更改,则返回 true;如果此 collection 不允许有重复元素,并且已经包含了指定的元素,则返回 false。
    如果 collection 由于某些原因(已经包含该元素的原因除外)拒绝添加特定的元素,那么它必须 抛出一个异常。
    参数:
      object - 确定此 collection 中是否存在的元素。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 add 操作。
      ClassCastException - 如果指定元素的类不允许它添加到此 collection 中。
      NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
      IllegalArgumentException - 如果元素的某属性不允许它添加到此 collection 中。
      IllegalStateException - 如果由于插入限制,元素不能在此时间添加。
   2、public boolean addAll(Collection<? extends E> collection)
    将指定 collection 中的所有元素都添加到此 collection 中。
    参数:
      collection - 包含要添加到此 collection 的元素的 collection。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 addAll 方法。
      ClassCastException - 如果指定 collection 中某个元素的类不允许它添加到此collection中。
      NullPointerException - 如果指定 collection 包含 null 元素,并且此 collection 不支持 null。 元素,或者指定的 collection 为 null 。
      IllegalArgumentException - 如果指定 collection 的元素的某属性不允许它添加到此 collection 中。
      IllegalStateException - 如果由于插入限制,不是所有的元素都能在此时间添加。
   3、public void clear()
    移除此 collection 中的所有元素。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 clear 操作。
   4、public boolean contains(Object object)
    如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少包含一个满足的元素object 时,返回 true。
    参数:
      object - 测试在此 collection 中是否存在的元素。
    返回:
      如果此 collection 包含指定的元素,则返回 true。
    抛出:
      ClassCastException - 如果指定元素的类型与此 collection 不兼容。
      NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
   5、public boolean containsAll(Collection<?> collection)
    如果此 collection 包含指定 collection 中的所有元素,则返回 true。
    参数:
      collection - 将检查是否包含在此 collection 中的 collection 。
    返回:
      如果此 collection 包含指定 collection 中的所有元素,则返回 true。
    抛出:
ClassCastException - 如果指定 collection 中有一个或多个元素的类型与此 collection 不兼容。
      NullPointerException - 如果指定 collection 包含一个或多个 null 元素,并且此 collection 不允许 null 元素,或者指定的 collection 为 null。
   6、public boolean equals(Object object)
    比较两个对象是否相等。
    覆盖:
      Object类中的 equals。
    参数:
      object - 要与此 collection 进行相等性比较的对象。
    返回:
      如果指定对象与此 collection 相等,则返回 true。
   7、public int hashCode()
    返回此 collection 的哈希码值。当 Collection 接口没有为 Object.hashCode 方法的常规协定添加任何约束时,为了满足 Object.hashCode 方法的常规协定,开发人员应该注意任何重写 Object.equals 方法的类必须重写 Object.hashCode 方法。需要特别指出的是,c1.equals(c2) 暗示着 c1.hashCode() == c2.hashCode()。
    覆盖:
      Object类中的 hashCode。
    返回:
      此 collection 的哈希码值。
   8、public boolean isEmpty()
    判断collection是否包含元素。
    返回:
      如果此 collection 不包含元素,则返回 true。
   9、public Iterator iterator()
    返回在此 collection 的元素上进行迭代的迭代器。关于元素返回的顺序没有任何保证(除非此 collection 是个能提供保证顺序的类实例)。
    指定者:
      接口 Iterable 中的 iterator。
    返回:
      在此 collection 的元素上进行迭代的 Iterator。
   10、public boolean remove(Object object)
    从此 collection 中移除指定元素的单个实例。更确切地讲,如果此 collection 包含一个或多个满足 (o==null ? e == null : o.equals(e)) 的元素object,则移除这样的元素,返回 true 。
    参数:
      object - 要从此 collection 中移除的元素(如果存在)。
    返回:
      如果此调用将移除一个元素,则返回 true。
    抛出:
      ClassCastException - 如果指定元素的类型与此 collection 不兼容。
      NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
      UnsupportedOperationException - 如果此 collection 不支持 remove 操作。
   11、public boolean removeAll(Collection<?> collection)
    移除此 collection 中那些也包含在指定 collection 中的所有元素。
    参数:
      collection - 办好要从此 collection 移除的元素的 collection。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 removeAll 方法。
      ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
      NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不支持 null 元素,或者指定的 collection 为 null。
   12、public boolean retainAll(Collection<?> collection)
    仅保留此 collection 中那些也包含在指定 collection 的元素,可理解为求并集。
    参数:
      collection - 包含保留在此 collection 中的元素的 collection 。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true 。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 retainAll 操作 。
      ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
      NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不允许 null 元素(可选),或者指定的 collection 为 null。
   13、public int size()
    返回此 collection 中的元素数。如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。
    返回:
      此 collection 中的元素数。
   14、public Object[ ] toArray()
   返回包含此 collection 中所有元素的数组。
    返回:
      包含此 collection 中所有元素的数组。
   15、public T[ ] toArray(T[] array)
    返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将分配一个具有指定数组的运行时类型和此 collection 大小的新数组。
    参数:
      array - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
    返回:
      包含此 collection 中所有元素的数组
    抛出:
      ArrayStoreException - 如果指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型 。
      NullPointerException - 如果指定的数组为 null。

2.2 AbstractCollection

2.2.1 AbstractCollection接口汇总

方法 作用
public boolean add(E object) 添加元素
public boolean addAll(Collection<? extends E> collection) 添加一个集合中的全部元素
public void clear() 清空集合
public boolean contains(Object object) 判断是否包含元素
public boolean containsAll(Collection<?> collection) 判断是否完全包含一个集合中的元素
public boolean isEmpty() 判断是否为空
public abstract Iterator iterator() 返回迭代器
public boolean remove(Object object) 清除某个元素
public boolean removeAll(Collection<?> collection) 清除一个集合中的所有元素怒
public boolean retainAll(Collection<?> collection) 判断是否存在并集
public abstract int size() 返回集合元素个数
public Object[ ] toArray() 将集合转化为数组
public T[ ] toArray(T[ ] contents) 将集合转化为数组
public String toString() 字符串表示

2.2.2 AbstractCollection接口详述

  AbstractCollection是个抽象类,实现了Collection接口。此类提供 Collection 接口的骨干实现,以最大限度地减少了实现Collection接口所需的工作。 具体如下:
   1、public boolean add(E object)
    确保此 collection 包含指定的元素,如果此 collection 由于调用而发生更改,则返回 true。
    指定者:
      接口 Collection 中的 add
    参数:
      object - 确定此 collection 中是否存在的元素。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true 。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 add 操作 。
      ClassCastException - 如果指定元素的类不允许它添加到此 collection 中 。
      NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素 。
      IllegalArgumentException - 如果元素的某属性不允许它添加到此 collection 中 。
      IllegalStateException - 如果由于插入限制,元素不能在此时间添加。
   2、public boolean addAll(Collection<? extends E> collection)
    将指定 collection 中的所有元素都添加到此 collection 中。
    指定者:
      接口 Collection 中的 addAll。
    参数:
      collection - 包含要添加到此 collection 的元素的 collection。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 addAll 方法。
      ClassCastException - 如果指定 collection 中某个元素的类不允许它添加到此 collection 中 。
      NullPointerException - 如果指定 collection 包含 null 元素,并且此 collection 不支持 null 元素,或者指定的 collection 为 null 。
      IllegalArgumentException - 如果指定 collection 的元素的某属性不允许它添加到此 collection 中。
      IllegalStateException - 如果由于插入限制,不是所有的元素都能在此时间添加。
   3、public void clear()
    移除此 collection 中的所有元素。
    指定者:
      接口 Collection 中的 clear。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 clear 操作。
   4、public boolean contains(Object object)
    如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少      包含一个满足 (o==null ? e == null : o.equals(e)) 的元素 e 时,返回 true。
    指定者:
      接口 Collection 中的 contains。
    参数:
      object - 测试在此 collection 中是否存在的元素。
    返回:
      如果此 collection 包含指定的元素,则返回 true。
    抛出:
      ClassCastException - 如果指定元素的类型与此 collection 不兼容。
      NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
   5、public boolean containsAll(Collection<?> collection)
    如果此 collection 包含指定 collection 中的所有元素,则返回 true。
    指定者:
      接口 Collection 中的 containsAll。
    参数:
      collection - 将检查是否包含在此 collection 中的 collection 。
    返回:
      如果此 collection 包含指定 collection 中的所有元素,则返回 true 。
    抛出:
      ClassCastException - 如果指定 collection 中有一个或多个元素的类型与此 collection 不兼容。
      NullPointerException - 如果指定 collection 包含一个或多个 null 元素,并且此 collection 不允许 null 元素,或者指定的 collection 为 null。
   6、public boolean isEmpty()
    判断集合是否为空。
    指定者:
      接口 Collection 中的 isEmpty。
    返回:
      如果此 collection 不包含元素,则返回 true。
   7、public abstract Iterator iterator()
    返回一个迭代器,由具体的子类去实现。
    返回:
      在此 collection 中的元素上进行迭代的迭代器。
   8、public boolean remove(Object object)
    从此 collection 中移除指定元素的单个实例,更确切地讲,如果此 collection 包含一个或多个满足 (o == null ? e == null : o.equals(e)) 的元素 e,则移除这样的元素。
    指定者:
      接口 Collection 中的 remove
    参数:
      object - 要从此 collection 中移除的元素。
    返回:
      如果此调用将移除一个元素,则返回 true 。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 remove 操作 。
      ClassCastException - 如果指定元素的类型与此 collection 不兼容。
      NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
   9、public boolean removeAll(Collection<?> collection)
    移除此 collection 中那些也包含在指定 collection 中的所有元素。
    指定者:
      接口 Collection 中的 removeAll。
    参数:
      collection - 办好要从此 collection 移除的元素的 collection 。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true 。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 removeAll 方法 。
      ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
      NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不支持 null 元素,或者指定的 collection 为 null。
   10、public boolean retainAll(Collection<?> collection)
    有交集则返回true。
    指定者:
      接口 Collection 中的 retainAll。
    参数:
      collection - 包含保留在此 collection 中的元素的 collection。
    返回:
      如果此 collection 由于调用而发生更改,则返回 true。
    抛出:
      UnsupportedOperationException - 如果此 collection 不支持 retainAll 操作 。
      ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
      NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不允许 null 元素,或者指定的 collection 为 null。
   11、public abstract int size()
    返回此 collection 中的元素数。如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。
   12、public Object[ ] toArray()
    返回包含此 collection 中所有元素的数组。
   13、public T[ ] toArray(T[ ] contents)
    返回包含此 collection 中所有元素的数组。
    指定者:
      接口 Collection 中的 toArray。
    参数:
      contents - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
    返回:
      包含此 collection 中所有元素的数组 。
    抛出:
      ArrayStoreException - 如果指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型 。
      NullPointerException - 如果指定的数组为 null。
   14、public String toString()
    返回此 collection 的字符串表示形式。该字符串表示形式由 collection 元素的列表组成,这些元素按其迭代器返回的顺序排列,并用方括号 ("[ ]") 括起来。相邻元素由字符 ", "(逗号加空格)分隔。
    覆盖:
      Object类中的 toString。
    返回:
      此 collection 的字符串表示形式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章