一、概述

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。

Java集合类的整体框架如下:

JAVA 集群框架 java集合框架主要有_集合类

从上图我们可以看出,集合框架下主要有集合类List和Set,Map和两大工具类Arrays、Collections,以及迭代器Iterator。

二、集合类的区别

(1)List接口通常表示一个列表(数组、队列、链表、栈等),其中的元素可以重复,常用实现类为ArrayList和LinkedList,另外还有不常用的Vector。另外,LinkedList还是实现了Queue接口,因此也可以作为队列使用。ArrayList是以数组为基础来实现的,而LinkedList是以双向链表为基础来实现的。针对ArrayList由于是基础数组来实现的,所以比较适合查询和修改的操作,因为这样不会造成数组元素位置改变而消耗cpu。而针对LinkedLis是基于双向链表来实现的,这样比较适合与删除和添加等操作。

(2)Set接口是基于Map实现的。通常表示一个集合,其中的元素不允许重复(通过hashcode和equals函数保证),常用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,而TreeSet是通过Map中的TreeMap实现的。另外,TreeSet还实现了SortedSet接口,因此是有序的集合(集合中的元素要实现Comparable接口,并覆写Compartor函数才行)。

(3)Map是一个映射接口,其中的每个元素都是一个key-value键值对,同样抽象类AbstractMap通过适配器模式实现了Map接口中的大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,不常用的HashTable直接实现了Map接口,它和Vector都是JDK1.0就引入的集合类。针对TreeMap,其中的key是有序的,而HashMap的键是无序的。同时我们可以发现HashTable是线程安全的,但是其是对全表加锁,这就导致效率十分低,所以在后面更多地使用ConcurrentHashMap来代替HashTable。