在Java开发中,我们有大量的保存、访问数据的需求,这时候就需要使用java中的集合类,一般来说,java中提供了list、set、map这些集合来供我们保存、访问数据。
java中集合类的继承图如下:
可见,list、set都实现了Collection接口,而Map都实现了Map接口,今天,我们从源码分析一下Collection接口:
一、Collection 继承的接口:
public interface Collection<E> extends Iterable<E> {
}
Iterable接口源码为:
public interface Iterable<T> {
/**
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
首先可以看到,Collection实现了Iterable接口,即可以通过iterator()方法来获取这个集合的迭代器来遍历这个集合,或者删除这个集合中的元素。
二、Collection定义的方法:
返回这个集合的大小:
int size();
判断这个集合是否为空:
boolean isEmpty();
是否包含某个元素:
boolean contains(Object o);
将集合中的数据转成列表形式
Object[] toArray();
将集合中的数据放置到传入的数组中
<T> T[] toArray(T[] a);
添加元素,返回值为是否添加成功
boolean add(E e);
删除集合中的元素:
boolean remove(Object o);
判断集合中是否包含传入的集合的所有元素:
boolean containsAll(Collection<?> c);
添加传入的集合中所有的元素:
boolean addAll(Collection<? extends E> c);
清除所有也处在传入的集合中的元素:
boolean removeAll(Collection<?> c);
只保留也处在传入的集合中的元素:
boolean retainAll(Collection<?> c);
清除所有元素:
void clear();