类介绍
collection
是java集合类的顶层接口,jdk中没有提供此接口的直接实现类,但是提供了很多实现了此接口的类,比如Set
,List
。这个接口往往用来在保证最大普适性的基础上传递和操作集合。
注意:直接或者间接实现此接口的类要提供两个构造方法。
- 无参构造方法
- 传入
Collection
的构造方法。将使用传入的Collection
中的元素构造此类。(当然,是直接引用还是拷贝出来一份再用,看自己喽)
在执行此接口的对集合中元素有修改的方法时(增删改),如果有不支持的操作(比如不允许修改)则抛出异常
UnsupportedOperationException
。当然,如果执行这些方法(增删改),但是乱七八遭搞了一通结论是不修改,那就可以直接不改,可以不抛出异常。
Collection
的某些子接口往往对数据有一些限制,传入非法数据时往往抛出NullPointerException
,ClassCastException
。
此接口的实现自己对是否支持并行进行规定。但是要注意如果支持多线程操作的话要处理好多线程引起的数据问题。
类源码解析
int size();
获得集合中的元素个数,如果超过Integer.MAX_VALUE
则返回Integer.MAX_VALUE
boolean isEmpty();
判空
boolean contains(Object o);
判断是否包含
Iterator iterator();
返回一个由此集合中元素组成的Iterator
,从Iterable
中继承下来的方法。
Object[] toArray();
将集合中元素转化为对应的数组,如果集合是有序的,转化成的数组的顺序和集合中元素的顺序相同。
返回的数组是新创建出来的,所以可以随便改
T[] toArray(T[] a);
上一个方法是Object
,这个使用了泛型。
传入了类型
T
和变量a
:
- 返回数组的运行时类型是指定数组的运行时类型。如果集合适合指定的数组,则返回其中。否则,将使用运行时类型分配新数组。
- 如果返回的元素数量小于传入的数组长度,多出来的部分用
null
补全。
boolean add(E e);
向集合中加一个元素,添加成功则返回true
;如果因为自己的限制或者其他原因没有加进去则返回false
boolean remove(Object o);
从集合中删除一个元素,如果集合中存在此元素并删除成功则返回true
boolean containsAll(Collection> c);
是否全包含喽
boolean addAll(Collection extends E> c);
添加所有
boolean removeAll(Collection> c);
删除输入的所有
default boolean removeIf(Predicate super E> filter)
按照判断函数删除返回true
的元素
boolean retainAll(Collection> c);
按照判断函数保存返回true
的元素
void clear();
清空集合
boolean equals(Object o);
判断是否一样。
equals()
是对象的一个方法,一般默认的方法是比较对象的哈希码(可以理解为对象的唯一编号)。
很多时候我们直接实现了
Collection
接口,并对equals()
方法进行了复写,以其通过比较内部元素的值是否相等来和List
,Set
进行比较。但是这样是有问题的:**
Object
中说,equals
是对称的。 **,所以只有a.equals(b)
和b.equals(a)
同时为true
才对。但是Set
和List
都只能和对应的Set
,List
比较才可能得到true
,所以如果你只是实现的Collection
而不是实现了Set
,List
。和他们比较绝对不会得到equals()=true
的结论。
int hashCode();
返回对象的哈希码
default Spliterator spliterator();
暂时放过
default Stream stream()
返回一个流
default Stream parallelStream()
返回一个支持并行处理的流
类应用
hehe(){
}
hehe(Iterator input){
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public T[] toArray(T[] a) {
return null;
}
@Override
public boolean add(String s) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection> c) {
return false;
}
@Override
public boolean addAll(Collection extends String> c) {
return false;
}
@Override
public boolean removeAll(Collection> c) {
return false;
}
@Override
public boolean retainAll(Collection> c) {
return false;
}
@Override
public void clear() {
}
}