Java集合简介

来源:互联网 发布:word for mac如何使用 编辑:程序博客网 时间:2024/05/16 19:49

Java集合简介

集合相关接口

Iterator和Iterable

Iterator

功能说明

Iterator表示对Collection进行迭代的迭代器,功能比之前使用的Enumeration更加完善,取代了Enumeration,与其不同的地方有以下两点:

  • 允许调用者利用定义良好的语义在迭代期间从迭代器所指向的collection中删除元素;
  • 方法的名称得到了改进(见名知义);
方法说明

boolean hasNext()

如果仍有元素可以迭代,则返回 true

T next()

返回迭代的下一个元素。

void remove()

从迭代器指向的集合中移除迭代器返回的最后一个元素。

forEachRemaining()

Java 1.8之后新增:未被迭代器迭代处理的元素仍保留自己的一些Action操作

Iterable

功能说明

一个类实现了Iterable接口后,就可以对它的对象实例进行for-each遍历。

实际上,类似于Xxxable这类的接口,通常都是使其实现类具有某种本来没有的功能,如

实现Comparable就可以于T类对象进行比较;

实现Serializable就可以进行序列化等;

方法说明

Iterator<T> iterator()

获取一个迭代器

void forEach(Consumer<? super T> action)

在未被迭代器处理之前,仍可进行起已有的action(也就是说在未被迭代处理之前,集合中的元素仍然是独立的,可以进行自身已经定义好的各种action操作),默认实现如下:

default void forEach(Consumer<? super T> action) {    Objects.requireNonNull(action);    for (T t : this) {        action.accept(t);    }}

Spliterator<T> spliterator()

在当前Iterable描述的元素基础之上创建一个Spliterator对象,默认实现如下:

default Spliterator<T> spliterator() {    return Spliterators.spliteratorUnknownSize(iterator(), 0);}

那么何为Spliterator呢,其实就是Iterator的split版本,可以讲需要进行的迭代的集合拆分成多个Iterator来处理,来更好的适应高并发,该接口时java 1.8之后新加的。

Collection和Map

Collection和Map虽都是与集合处理有关的接口,但二者之间并没有直接联系。

Collection(接口)

Collection是集合类的根接口,java中无该接口的直接实现类。但有两个接口继承于Collection,分别是SetList

AbstractCollection

Collection接口的部分实现

Set(接口)

Set 不能包含重复的元素,无序(TreeSet是二叉排序树)。

SortedSet(接口)

有序的Set,其中E必须实现 Comparable 接口(或者被指定的比较器所接受),所有这些元素都必须是可互相比较的

AbstractSet(抽象类)

提供了Set接口的部分实现。

HashSet(实现类)

此实现不是同步的,即不是线程安全的,要得到同步的HashSet,方法如下:

Set s = Collections.synchronizedSet(new HashSet());
TreeSet(实现类)

此实现不是同步的,即不是线程安全的,要得到同步的TreeSet,方法如下:

Set s = Collections.synchronizedSortedSet(new TreeSet());
List

List是一个有序的集合,可以包含重复元素,且可以通过索引方式来访问。

AbstractList

List接口的部分实现。

  • 实现不可修改的列表,只需实现get(int)和size()方法的实现。
  • 实现可修改的列表(列表大小不可变),还要重写set(int, E)方法。
  • 实现可修改的列表(列表大小可变),要重写set(int, E)、add(int, E)和remove(int)。
  • 不必提供迭代器实现
AbstractSequentialList

AbstractList的进一步实现,提供的抽象方法只有一个,如下:

public abstract ListIterator<E> listIterator(int index);

也就是说实现该类只要实现listIterator(int index)方法即可,它的其他方法实现上都依赖于上面这个方法。

LinkedList是它的具体实现。

ArrayList(实现类)

List 接口的大小可变数组的实现。(大致功能等同于Vector类,但要注意,此实现不是同步的,即不是线程安全的),默认列表长度为10。

Vector(实现类)

它是同步的,即线程安全的可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

LinkedList(实现类)

List 接口的链接列表实现。注意,此实现不是同步的,即不是线程安全的

Queue(接口)

队列,在处理元素前用于保存元素的集合,通常一FIFO(先进先出)的方式排序各个元素(优先级队列和LIFO队列除外)。

每个队列的实现必须指定其顺序属性

BlockingQueue

支持两个附加操作的队列,即put(E e)(存储元素时等待队列空间变得可用)和take()(获取元素时等待队列变为非空)。

BlockingQueue的实现是线程安全的

Deque(接口)

一个线性集合,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

BlockingDeque

支持两个附加操作的 Queue,这两个操作是:获取元素时等待双端队列变为非空;存储元素时等待双端队列中的空间变得可用。对应的方法分别是:

// 头部putFirst(E e);E takeFirst();// 尾部putLast(E e);E takeLast();

BlockingDeque的实现是线程安全的

Map(接口)

Map中包含了K-V对,不能包含重复的key,但可以包含相同的value,无序(TreeMap是二叉排序树)。Map 接口提供三种集合视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容,对应的方法分别是:

// 映射关系集合Set<Map.Entry<K,V> entrySet()// 键值集合Set<K> keySet();// 值的集合Collection<V> values();
Entry
SortedMap(接口)

进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet、keySet 和 values 方法返回)进行迭代时,此顺序就会反映出来。

内容比较多,看来一个晚上写不完,未完待续。。。。。。

0 0
原创粉丝点击