java.util.Collection体系源码解读<二>Collection接口源码
来源:互联网 发布:tengine和nginx哪个好 编辑:程序博客网 时间:2024/05/08 05:38
Collection接口是绝大多数集合类的父接口.
1.Collection是java.util所有集合相关类的根接口
2.Collection表示一组对象,这些对象可以看做是Collection的元素
3.一些 Collection允许有重复的元素(如List),而另一些则不允许(如Set),一些 Collection是有序的(如List),而另一些则是无序的(如Set)
4.由public interface Collection<E> extends Iterable<E>{}我们可以看到Collection接口是继承了Iterable接口的一些特性的,所以我们先来看看Iterable接口相关的源码:
java.util.Iterable源码:
public interface Iterable<T> {//该接口包含一个泛型迭代器,用来迭代Collection的元素Iterator<T> iterator();}
java.util.Iterator源码:
package java.util;public interface Iterator<E> { //是否有下一个元素可以迭代 boolean hasNext(); //返回下一个迭代的元素 E next(); //这里可以变迭代边删除,但是在一般的for循环遍历中,不可以边遍历边删除 void remove();}
6.下面我们来看Collection源码:
package java.util;public interface Collection<E> extends Iterable<E> { /**返回此 collection 中的元素数。注意:如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE*/ int size(); /**判断collection是否有元素*/ boolean isEmpty(); /**collection是否包含某个元素.注意:当且仅当此 collection 至少包含一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,返回 true ,可见,包含null的前提是此collection中也必须包含一个null */ boolean contains(Object o); /**返回在此 collection 的元素上进行迭代的迭代器。 注意:如果collection的实例中元素是无序的,则素返回的顺序没有任何保证 */ Iterator<E> iterator(); /**返回包含此 collection 中所有元素的数组. 注意:1.此数组是new出来的,并不维持对原有数据的引用 2.如果元素的迭代器保证了元素是有序的,则返回的数组中的对象也是有序的 */ Object[] toArray(); /**将collection元素装入指定数组并返回 注意:1.若a能容纳所有元素,则返回包含此 collection 元素的数组 2.若a能不能容纳所有元素, 则会残生一个新数组,用来a和此collection的所有元素 */ <T> T[] toArray(T[] a); /**添加元素,如果此 collection 由于添加而发生更改,则返回 true。 注意:1.如果此 collection 不允许有重复元素,并且已经包含了指定的元素,则返回 false。 2.一些 collection 拒绝添加 null 元素(如),个人觉得最好所有的collectio集合拒绝添加null元素 3.如果 collection 由于某些原因(已经包含该元素的原因除外)拒绝添加特定的元素,那么它必须 抛出一个异常(而不是返回 false) */ boolean add(E e); /**从此 collection 中移除指定元素,如果此 collection 包含一个或多个满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除这样的元素。 如果移除成功,或者此 collection 由于调用而发生更改,则返回 true 注意:抛出的异常.ClassCastException.NullPointerException.UnsupportedOperationException */ boolean remove(Object o); /**是否包含某个集合里面的所有元素,如果此 collection 包含指定 collection 中的所有元素,则返回 true*/ boolean containsAll(Collection<?> c); /**将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 如果在添加的过程中时同时有某个进程修改指定的 非空collection,那么这个方法不一定能确保执行成功(一般不建议这么做) */ boolean addAll(Collection<? extends E> c); /**移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 此调用返回后,collection 中将不包含任何与指定 collection 相同的元素*/ boolean removeAll(Collection<?> c); /**保留此 collection 中那些也包含在指定 collection 的元素 换句话说,移除此 collection 中未包含在指定 collection 中的所有元素。*/ boolean retainAll(Collection<?> c); /**移除此 collection 中的所有元素*/ void clear(); /**比较此 collection 与指定对象是否相等 jdk源注释文档中关于此方法说了许多,个人总结如下: 1.除非自己需要实现值比较,而不是引用比较,否则不建议改写此方法 3.比较时,该方法的相等必须是相等的,也就是说若q.equals(b)==true则b.equals(a) 4.自己重写一个实现该接口的集合,但不是List或者Set的派生集合时,重写此方法一定要注意第一点,同时,对于list或者Set,只能是list和 list相等,set和set相等,自己重写一个实现Collection的集合类时,如果调用常规的equals方法,将该类与任何列表或 set 进行比较时, 常规的 equals 方法必须返回 false. 5.无法写出一个同时实现正确实现 Set 和 List 接口的类 */ boolean equals(Object o); /**返回此 collection 的哈希码值。 注意:1.当 Collection 接口没有为 Object.hashCode 方法的常规协定添加任何约束时,为了满足 Object.hashCode 方法的常规协定, 程序员应该注意任何重写 Object.equals 方法的类必须重写 Object.hashCode 方法。 需要特别指出的是,c1.equals(c2) 暗示着 c1.hashCode()==c2.hashCode()。 */ int hashCode();}
1 0
- java.util.Collection体系源码解读<二>Collection接口源码
- java.util.Collection体系源码解读<一>Collection简介
- java.util.Collection体系源码解读<四>AbstractList源码解读
- java.util.Collection体系源码解读<三>AbstractCollection抽象类源码解读
- java collection接口源码
- 源码分析-java-collection接口
- java.util.Collection接口
- Java8 Collection接口源码阅读(二)
- Collection接口源码解析
- java.util解析Collection接口
- java.util.Collection<E>接口
- java Collection源码解析
- 解析java.util集合类源码(Collection和AbstractCollection篇)
- jdk源码之Collection接口
- 【JDK源码阅读1-util】Collection
- 【JDK源码阅读2-util】Collection-List
- 【JDK源码阅读6-util】Collection-Set
- JAVA之util中Collection接口
- 给结构体指针分配内存后依然出现段错误的解决
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- 递归算法及经典递归例子代码实现
- 心得
- BaseAdapter使用
- java.util.Collection体系源码解读<二>Collection接口源码
- 帝国CMS与织梦dedecms比较
- iOS MRC下对象 retainCount=0后 还可以使用一次
- hdoj55464Clarke and problem【dp】
- 数据结构与算法——快速排序
- 川藏北线-成都老茶馆叹茶
- 在局域网内知道计算机的名字查找计算机的IP
- UIScrollView图像缩放
- 56.Binary Tree Preorder Traversal