java.util.Collection源码分析
public interface Collection extends Iterable
Java不提供接口Collection的直接实现类,在该接口中声明集合类最普遍的方法,常用来传递Collection;
包 (bag) 或多集合 (multiset)(可能包含重复元素的无序 collection)应该直接实现此接口。
实现该接口的实现类需要两个标准构造方法:无参构造器以创建空collection;带collection类型的单参数以创建具有相同元素的新collection;
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// replace with empty array.
this.elementData = EMPTY_ELEMENTDATA;
}
}
Collection是否时线程安全的由实现类自己决定。集合包含自己时递归遍历会出错;
ArrayList<Collection> a = new ArrayList<>();
a.add(a);
while(a.get(0)!=null){
System.out.println(a.getClass().getName());
a = (ArrayList<Collection>) a.get(0);
}
方法
int size();
返回集合中元素个数,若超过整型最大表示返回则返回Integer.MAX_VALUE 07fffffff
boolean isEmpty();
返回集合是否为空
boolean contains(Object o);
如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少包含一个满足 (onull ? enull : o.equals(e)) 的元素 e 时,返回 true。
抛出:
ClassCastException - 如果指定元素的类型与此 collection 不兼容(可选)。
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素(可选)。
Iterator iterator();
返回在此 collection 的元素上进行迭代的迭代器。关于元素返回的顺序没有任何保证(除非此 collection 是某个能提供保证顺序的类实例)。
Object[] toArray();
数组元素顺序和迭代器中顺序相同;容器中元素和数组中元素是同一份;
** T[] toArray(T[] a); **
浅拷贝,除非引用数据类型实现了Cloneable接口、实现clone方法;(实现序列化接口Serializable,将对象序列化再反序列化;)
boolean add(E e);
确保此 collection 包含指定的元素(可选操作)。如果 collection 由于某些原因(已经包含该元素的原因除外)拒绝添加特定的元素,那么它必须 抛出一个异常(而不是返回 false)。这确保了在此调用返回后,collection 总是包含指定的元素。
boolean remove(Object o)
移除指定元素(onull?enull:o.equals(e))成功返回true
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。求交集
void clear()
清空
boolean equals(Object o)
int hashCode()
#未完待续从Iterable接口继承的方法