Java集合学习(一)

    什么是集合?Java官网API文档里这样定义和描述的:

    public interface Collection<E>extends Iterable<E>

    集合表示一组对象,每一个对象称为元素。集合可以是包含重复元素的,也可以是各个元素互不相同。它既可以是无序的也可以是有序。JDK并没有提供它的直接实现,而是提供了更具体的子接口比如Set,List等实现。Collection接口通常在需要最高抽象性的集合传递和操作时被提及。

    Bag及MultiSet(无序且能包含重复元素)相关接口需要直接实现Collection接口。

    所有通用Collection接口实现类(通常实现于Collection子接口)应当包含两个标准构造函数:一个是无入参构造函数,用来创建一个空集合;另一个是以相同类型集合为单入参,用来创建一个与入参包含相同元素的集合。第二种构造函数通常用来复制一个集合,即创建一个等价集合。

    Collection接口也包含一些“有害的”方法,即方法对集合实施的修改为当前集合所不支持的操作,此时会抛出UnsupportedOperationException异常。例如可以在不可修改的集合上调用addALL方法,但当被添加的集合为空时会抛出异常。

    一些集合实现对其包含元素有严格要求,比如有些实现禁止非空元素,有些对元素类型有严格要求。尝试添加不合法的元素会抛出unchecked异常,如常见的NullPointerException和ClassCastException。尝试查询不合法元素是否存在通常抛出异常或直接返回false。更一般的,插入不合格元素到集合中会抛出异常或者对于某些实现方法来说返回成功。

    不同集合的同步策略取决于各个集合自身。在缺少强有力保证情况下,调用正在被另一个线程改变的集合中的方法可能导致未知的错误。方法调用通常包括直接调用、传递集合给其它方法实现间接调用、或者使用已存在的迭代器检查集合。

    许多集合框架接口中的方法的定义依赖于equal方法。例如方法contains(Object o)的使用规范说到“当且仅当集合包含至少一个满足条件(o==null ? e==null : o.equals(e))的元素e时返回true”。但这段描述不能解释为当以非空入参o调用Collection.contains时一定会调用o.equals(e)。接口实现可以自由优化当equal调用可以避免调用时。比如可以首先比较两个元素的哈希码( Object.hashCode()可以保证不同的对象产生不一样的哈希码)。推广来说,只要作者认为适当的时候,集合框架接口的实现可以自由的利用底层object方法的优点。

    Collection接口只是Java集合框架的一个成员之一(Java Collections FrameWork)。

    最后是该接口的方法细节:

    int size():返回集合元素个数;

    boolean isEmpty():当集合不包含元素时返回true;

    Iterator<E> iterator():返回指向集合元素的迭代器;

    Object[] toArray():返回包含集合元素的数组;

    boolean add(E e):确保集合包含指定的元素,集合在方法调用后真正改变时返回true,当集合已经包含该元素且不允许包含重复元素时返回false;

    boolean remove(Object o):移除集合中的指定元素,当方法调用后元素被移除时返回true;

    boolean containsAll(Collection<?> c):当集合包含指定集合c中的所有元素时返回true;

    boolean addAll(Collection<? extend E> c):添加指定集合中的所有元素到当前集合;

    boolean removeAll(Collection<?> c):移除当前集合中同样包含在指定集合中的元素;

    boolean retainAll(Collection<?> c):仅仅保留包含在指定集合中的元素;

    void clear():移除集合中所有的元素;

    boolean equals(Object o):比较集合与指定对象是否相等;

    int hashCode():返回集合对象的哈希码;

 

 

 

 

 

 


 

posted @ 2015-09-20 23:10  wmymartin  阅读(202)  评论(0编辑  收藏  举报