java集合类库将接口与实现分离。
1、接口
集合有2个基本接口,Collection接口和Map接口。集合框架中的接口如下图:
Collection接口
集合类的基本接口是Collection接口,该接口有2个基本方法:
public interface Collection<E> {
boolean add(E e); //向集合中添加元素,并返回是否添加成功的结果
Iterator<E> iterator(); //返回一个实现了iterator接口的对象,可以用来依次访问集合中的元素
}
Collection中其他方法:
int size();
boolean isEmpty();
boolean contains(E obj);
boolean containAll(Collection<?> other);
boolean addAll(Collection<? extends E> other);
boolean remove(E e);
boolean removeAll(Collection<?> other);
void clear();
boolean removeIf(Predicate<? super E> filter);
boolean retainAll(Collection<?> other); // 删除所有与other集合中的元素不同的元素,如果调用改变了集合,则返回true
E [] toArray();
Iterator接口
迭代器接口包含4个方法:
public interface Iterator<E> {
E next();
boolean hasNext();
void remove(); //删除上次调用next方法时返回的元素
default void forEachRemaining(Consumer < ? super E > action){};
}
注意:next方法和remove方法具有互相依赖性。如果调用remove之前没有调用next,将会抛出IllegalStateException异常。
ListIterator接口
在Iterator接口基础上,增加了add方法。该add方法和Collection.add不同,其假定添加操作总会改变链表,在迭代器位置之前添加1个新对象。另外,ListIterator接口有2个方法可以用来反向遍历链表。
E previous(); // 返回越过的对象
boolean hasPrevious()
并发修改异常:如果在某个迭代器修改集合时,另一个迭代器对其进行遍历,会出现混乱的现象。如,一个迭代器指向另一个迭代器刚刚删除的元素的前面,现在这个迭代器就是无效的,并且不应该再使用。链表迭代器可以检测到这种修改。如果迭代器发现它的集合被另一个迭代器修改了,或是该集合自身的方法修改了,会抛出ConcurrentModificationException异常。
Map接口
向集合插入元素:V put(K key, V value)
从集合读取元素:V get(K key)
2、具体集合
ArrayList | 一种可以动态增长和缩减的索引序列 |
LinkedList | 一种可以在任何位置上进行高校地插入和删除操作的有序序列 |
ArrayDeque | 一种用循环数组实现的双端队列 |
HashSet | 一种没有重复元素的无序集合 |
TreeSet | 一种有序集 |
EnumSet | 一种包含枚举类型值的集 |
LinkedHashSet | 一种可以记住元素插入次序的集 |
priorityQueue | 一种可以高效删除最小元素的集合 |
HashMap | 一种存储键/值关联的数据结构 |
TreeMap | 一种键值有序排列的映射表 |
EnumMap | 一种键值属于枚举类型的映射表 |
LinkedHashMap | 一种可以记住键值添加次序的映射表 |
WeakHashMap | 一种其值无用之后可以被垃圾回收器回收的映射表 |
IdentityHashMap | 一种用==而不是equal比较键值的映射表 |
版权声明:本文为css2017原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。