Java集合框架知识梳理

【Java同步容器】       

     Java集合类是一种工具类,作用同容器一样,用于存储任意数量的具有共同属性的对象。主要从两大根接口Collection和Map延伸而来,以及一个工具类(Utilities)、两大关联接口类。接口Collection旗下的容器存储的都是单个数据,其中接口List旗下容器所存的数据都是有序的(元素可以重复),接口Set旗下容器所存的数据都是无序的(元素不可以重复);接口Map旗下的容器存储的都是以键-值对出现的数据。Set、Map类似一个罐子,元素位置在逻辑上是混乱无章的,但Set中元素是一个一个分开的;Map中元素是成双成对的。List更像一个数组,元素在逻辑上是排着队的。

Java集合框架知识梳理_第1张图片

【Java集合框架的体系结构如下:】

Java集合框架知识梳理_第2张图片

其中Iterator只与Collection旗下的容器有关联。

【工具类Utilities】

工具类中包含两大类:Arrays和Collections,作用是用来操作数组、集合,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,当然了,如果要用线程安全的结合类,首选Concurrent并发包下的对应的集合类。

【ps,上面给出的集合大多适用于单线程,如果要保证多线程安全,有一些对应的并发集合】

Collection家族结构如下:

Java集合框架知识梳理_第3张图片

LinkedList、ArrayList、Vector三者比较:

  • ArrayList 就是动态数组,是Array的复杂版本,动态的增加和减少元素.当更多的元素加入到ArrayList中时,其大小将会动态地增长。它的元素可以通过get/set方法直接访问,因为ArrayList本质上是一个数组。
  • Vector ArrayList类似底层也是数组, 区别在于Vector是同步类(synchronized).因此,开销就比ArrayList要大。
  • LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比。它还实现了 Queue 接口,因此具有队列的属性,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等.

【注意】针对由数组实现的容器在使用时最好设定一个使用容量值,因为当容量不够用时,需要从新开辟新的空间,并将旧的内容全部复制到新开辟的空间处。

LinkedHashSet、HashSet、TreeSet三者比较:

  • LinkedHashSet 使用HashCode值来决定元素存储的位置,但存储的方式使用的是链表结构。
  • HashSet 使用HashCode值来决定元素存储的位置,底层的实现依赖于HashMap,且线程不安全。
  • TreeSet 采用树结构实现(红黑树),存储的元素是可排序的。

Map家族结构如下:

Java集合框架知识梳理_第4张图片

HashMap、HashTable、Treemap三者比较:

  • TreeMap 实现了接口 SortedMap 因此是其中蕴含的元素是有序的,排序的参考标准是key值的大小,使用散列表实现。
  • HashMap 允许将key值设置为null,且该类实现的方法不是同步的,因此不具有线程安全性,使用红黑树实现。
  • HashTable 不允许将key值设置为null,且该类实现的方法是同步的,因此具有线程安全性

现给出网上的一些参考资料:

【集合详解】Java集合总结(上)-Collection家族

【集合详解】Java集合总结(中)-Map家族

【集合详解】Java集合总结(下)-常用集合类对比


Java并发容器

java中并发容器及其编程由 java.util.concurrent包实现,包下的所有类可以分成以下几种:

  • locks部分:显示锁有关内容的实现(互斥锁、速写锁等);
  • atomic部分:原子变量类,是构建非阻塞算法的基础;
  • executor部分:线程池;
  • collection部分:并发容器;
  • tool部分:同步工具,如信号量、闭锁、栅栏等功能;
【并发容器类图如下:】

Java集合框架知识梳理_第5张图片





你可能感兴趣的:(java)