Java基础之Collections框架及其源码分析
集合有时候称为容器,是将多个元素组合成一个单元的简单对象。集合用于存储、检索、操作和通信聚合数据。
Collections接口层级
Collections集合接口封装了不同类型的集合,这些接口允许对集合的操作独立于它们表示的细节。Collections集合接口是Java集合框架的基础。
如上图所示有很多子接口:
Set: 使用过set集合的应该大概了解了set的使用。set是不能包含重复元素的集合,
SortedSet:只是Set是有序形式。
List:有序集合(有时称为序列)。列表可以包含重复的元素。列表的用户通常可以精确地控制每个元素在列表中的位置,并且可以通过元素的整数索引(位置)访问元素。
Queue:队列,使用先进先出的原则(FIFO)。
Deque:双向队列,Deques可以作为先进先出(FIFO)和后进先出(LIFO)两种形式使用。在deque中,可以在两端插入、检索和删除所有新元素。
Map:以key-value映射元素,不能包括相同的Key,一个key最多只能关联一个值。
SortedMap:只是Map是有序形式。
申明Collections
public interface Collection…定义一个Collection接口。
源码
Collection继承了Iterable接口,实现迭代器接口。
public interface Collection<E> extends Iterable<E> {
/**
返回集合中元素个数 ,如果集合中的元素大于Integer.MAX_VALUE,将返回Integer.MAX_VALUE
*/
int size();
/**
* 返回集合是否为空
*/
boolean isEmpty();
/**
*返回集合中是否包含指定元素
*/
boolean contains(Object o);
/**
返回此集合中元素的迭代器
*/
Iterator<E> iterator();
/**
* 返回一个数组包含集合中的所有元素
如果这个集合保证了迭代器返回元素的顺序,那么这个方法必须以相同的顺序返回元素
*
*/
Object[] toArray();
/**
* 指定相关类型的包含集合中所有元素的数组(指定类型)
*/
<T> T[] toArray(T[] a);
/**
* 确保此集合包含指定的元素,添加元素,如果操作成功,将返回true,否则返回true,如果限制集合元素不能重复,添加相同的元素将返回false
*/
boolean add(E e);
/**
* 移除集合中指定的元素返回操作的结果
*/
boolean remove(Object o);
/**
*判断集合中是否包含指定集合中的所有元素
*/
boolean containsAll(Collection<?> c);
/**
* 添加指定集合中所有元素到当前的集合中
*/
boolean addAll(Collection<? extends E> c);
/**
* 当前集合中删除指定集合中所有的元素
*/
boolean removeAll(Collection<?> c);
/**
JDK 1.8支持lambda表达式
当前集合中删除指定集合中所有的元素,如果出现异常,交给Predicate处理
*/
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
/**
*仅保留此集合中指定集合中包含的元素(可选操作)
*/
boolean retainAll(Collection<?> c);
/**
移除集合中所有的元素
*/
void clear();
/**
* 比较指定的对象与此集合是否相等.
*/
boolean equals(Object o);
/**
* 返回集合的hashCode值.
*/
int hashCode();
/**
JDK1.8之后版本使用,default也是1.8使用,接口默认方法
* 在此集合的元素上创建一个Spliterator
*/
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, 0);
}
/**
JDK1.8之后版本使用,default也是1.8使用,接口默认方法
*返回一个顺序的Stream,将此集合作为其源
*/
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
/**
JDK1.8之后版本使用,使用并行流处理集合,包括filter,group等操作,,default也是1.8使用,接口默认方法
*返回一个可能是并行的Stream,将此集合作为其源。此方法允许返回顺序流。
*/
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
}
看到Collections集合顶层的接口,里面的相关方法,我们知道List,Set等子集合接口里面的方法形式。并且了解了我们使用lambda进行操作List的时候相关实现所使用的方法。