JAVA8集合框架——介绍

 这里只做对java常用集合做一个简单梳理,后续章节会有对应的用法及源码讲解

 Java集合是java提供的工具包(java.util.*),包含了常用的数据结构:集合、链表、队列、栈、数组、映射等

 java8的详细中文api地址:https://www.matools.com/api/java8

 下图是常用的结合框架图:

JAVA8集合框架——介绍

  • Iterable<T>

实现此接口允许对象成为“for-each loop”语句的目标,for-each循环是Java相比C语言中的for循环拓展而来的一种新的遍历数组的循环方式。

for-each用法: for ( 变量类型  变量名 : 数组名 ) {  需要执行的循环语句; }

  • Collection<E>

集合层次结构中的根界面 。 集合表示一组被称为其元素的对象。 一些集合允许重复元素,而其他集合不允许。 有些被命令和其他无序。 JDK不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如Set和List 。 该界面通常用于传递集合,并在需要最大的通用性的情况下对其进行操作。

  • List<E>

有序集合(也称为序列 )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。

  • ArrayList<E>

可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。请注意,此实现不同步。 如果多个线程同时访问884457282749实例,并且至少有一个线程在结构上修改列表,则必须在外部进行同步。 (结构修改是添加或删除一个或多个元素的任何操作,或明确调整后台数组的大小;仅设置元素的值不是结构修改。)这通常是通过在一些自然地封装了列表。 如果没有这样的对象存在,列表应该使用Collections.synchronizedList方法“包装”。

  • LinkedList<E>

双链表实现了List和Deque接口。 实现所有可选列表操作,并允许所有元素(包括null )。所有的操作都能像双向列表一样预期。 索引到列表中的操作将从开始或结束遍历列表,以更接近指定的索引为准。请注意,此实现不同步。 如果多个线程同时访问链接列表,并且至少有一个线程在结构上修改列表,则必须在外部进行同步。 (结构修改是添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这通常通过在自然封装列表的对象上进行同步来实现。 如果没有这样的对象存在,列表应该使用Collections.synchronizedList方法“包装”。

  • Vector<E>

Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建Vector之后添加和删除项目。 Vector是同步的。 如果不需要线程安全的实现,建议使用ArrayList代替Vector 。

  • Stack<E>

Stack类代表最先进先出(LIFO)堆栈的对象。 它扩展了类别Vector与五个操作,允许一个向量被视为堆栈。 设置在通常的push和pop操作,以及作为一种方法来peek在堆栈,以测试堆栈是否为empty的方法,以及向search在栈中的项目的方法在顶部项目和发现多远它是从顶部。

  • Set<E>

       不包含重复元素的集合。

  •  HashSet<E>

此类实现Set接口,由哈希表(实际为HashMap实例)支持。 对集合的迭代次序不作任何保证; 特别是,它不能保证订单在一段时间内保持不变。 这个类允许null元素。请注意,此实现不同步。 如果多个线程并发访问哈希集,并且至少有一个线程修改该集合,那么它必须在外部进行同步。 这通常通过在自然地封装集合的一些对象上进行同步来实现。 如果没有这样的对象存在,那么该集合应该使用Collections.synchronizedSet方法“包装”。

  •  TreeSet<E>

请注意,此实现不同步。 如果多个线程并发访问树,并且至少有一个线程修改该集合,则必须在外部进行同步。 这通常通过在自然地封装集合的一些对象上进行同步来实现。 如果没有这样的对象存在,那么该集合应该使Collections.synchronizedSortedSet方法“包装”。 

  • Map<K,V>

将键映射到值的对象。 Map不能包含重复的键; 每个键可以映射到最多一个值。

  • ConcurrentHashMap<K,V>

支持检索的完全并发性和更新的高预期并发性的哈希表。 这个类服从相同功能规范如Hashtable ,并且包括对应于每个方法的方法版本Hashtable 。 不过,尽管所有操作都是线程安全的,检索操作并不意味着锁定,并没有为防止所有访问的方式锁定整个表的任何支持。 这个类可以在依赖于线程安全性的程序中与Hashtable完全互Hashtable ,但不依赖于其同步细节。

  • HashMap<K,V>

基于哈希表的实现的Map接口。 此实现提供了所有可选的地图操作,并允许null的值和null键。 ( HashMap类大致相当于Hashtable ,除了它是不同步的,并允许null)。这个类不能保证地图的顺序; 特别是,它不能保证订单在一段时间内保持不变。

  •  Hashtable<K,V>

该类实现了一个哈希表,它将键映射到值。 任何非null对象都可以用作键值或值。为了从散列表成功存储和检索对象,用作键的对象必须实现hashCode方法和equals方法。