Java集合

一、参考文献

1、:List、Set、Map的用法和区别

2、:Java集合系列目录

01. Java 集合系列01之 总体框架

02. Java 集合系列02之 Collection架构

03. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

04. Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

05. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

06. Java 集合系列06之 Vector详细介绍(源码解析)和使用示例

07. Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

08. Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

09. Java 集合系列09之 Map架构

10. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例

11. Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

12. Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例

13. Java 集合系列13之 WeakHashMap详细介绍(源码解析)和使用示例

14. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

15. Java 集合系列15之 Set架构

16. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

17. Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例

18. Java 集合系列18之 Iterator和Enumeration比较

 

二、总体框架

Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*
Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)、。
Java集合工具包框架图(如下):

Java集合_第1张图片

<大致说明>

  看上面的框架图,先抓住它的主干,即Collection和Map。

1、Collection

  Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。

  Collection包含了List和Set两大分支。

1.1、List

(1)List概括

  List是一个有序的队列,每一个元素都有它的索引,第一个元素的索引值是0。List 是一个接口,它继承于Collection的接口。

  • AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。
  • AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”。
  • ArrayList, LinkedList, Vector, Stack是List的4个实现类。

  ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。

  LinkedList 是一个循环双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率高。

  Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但是ArrayList是非线程安全的,而Vector是线程安全的。

  Stack 是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)。

(2)List使用场景

  如果涉及到“栈”、“队列”、“链表”等操作,应该考虑用List,具体的选择哪个List,根据下面的标准来取舍。

  • 对于需要快速插入,删除元素,应该使用LinkedList。
  • 对于需要快速随机访问元素,应该使用ArrayList。
  • 对于“单线程环境” 或者 “多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步的类(如ArrayList)。对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)。

  参考文献:List使用总结

1.2、Set

  Set是一个不允许有重复元素的集合,它通过Map来实现。
  Set的实现类有HastSet和TreeSet。

(1)HashSet

  HashSet依赖于HashMap,它实际上是通过HashMap实现的,因此非同步、允许有null、无序。

(1)TreeSet

  TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。因此非同步、允许有null、有序。

2、Map

区别:HahsMap、Hashtable、WeakHashMap、TreeMap的区别

  • Map是一个映射接口,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。
  • SortedMap 有序的“键值对”映射接口。
  • NavigableMap 是继承于SortedMap的,支持导航函数的接口。
  • AbstractMap是个抽象类,它实现了Map接口中的大部分API,减少了“Map的实现类”的重复编码。HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。
  • Dictionary是一个抽象类,它直接继承于Object类,没有实现任何接口。

 HashMap, Hashtable, TreeMap, WeakHashMap这4个类是“键值对”映射的实现类。它们各有区别!

  HashMap 是基于“拉链法”实现的散列表,借助数组实现。一般用于单线程程序中。非同步、线程不安全;键、值可为null;只支持Iterator(迭代器)遍历
  Hashtable 也是基于“拉链法”实现的散列表,借助数组实现。它一般用于多线程程序中。同步、线程安全的;键、值不可为null;支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历
  WeakHashMap 也是基于“拉链法”实现的散列表,借助数组实现。它一般也用于单线程程序中。相比HashMap,WeakHashMap中的键是“弱键”,当“弱键”被GC回收时(如将key设为null后),它对应的键值对也会被从WeakHashMap中删除;而HashMap中的键是强键。
  TreeMap 是有序的散列表,它是通过红黑树实现的。它一般用于单线程中存储有序的映射。

  接下来,再看Iterator。它是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。 
  ListIterator是专门为遍历List而存在的。

  再看Enumeration,它是JDK 1.0引入的抽象类。作用和Iterator一样,也是遍历集合;但是Enumeration的功能要比Iterator少。在上面的框图中,Enumeration只能在Hashtable, Vector, Stack中使用。

  最后,看Arrays和Collections。它们是操作数组、集合的两个工具类。

 

你可能感兴趣的:(Java集合)