java-集合

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版权协议,转载请附上原文出处链接和本声明。