java中的容器就是集合。
java中的集合分为两个部分:java.util、java.util.concurrent(JUC)两部分内容
1.0版本
此版本出现了Vector、Stack、HashTable、Properties四部分内容,
Vector是一个线程安全的可变长度数组;
Stack是栈,类中有出栈,入栈等方法;
HashTable是一个线程安全Map,与后面1.2版本出现的HashMap差别不大,主要区别Key不允许出现null,在操作HashTable时会锁住整个HashTable,导致性能较低;
Properties是用于存储属性文件中的内容;
1.2版本
此版本中java开始面向接口编程,大量使用接口
Collection接口在1.2版本中是作为顶级接口出现的,他有两个实现类,List和Set,List用于存储有序可重复数据,Set用来存储无序不可重复数据;
List接口下实现了LinkedList和ArrayList两个类,LinkedList底层使用双向非循环链表实现,ArrayList是一个可变长度数组,扩容机制可见补充部分;
为了使集合中的结构更加清晰,1.2版本将Vector也作为了List的实现之一;
Set接口下实现了HashSet和SortedSet两个,SortedSet用来存储可排序数据,且在1.2版本TreeSet是作为SortedSet直接实现类实现的;
Map接口下实现了HashMap和SortedMap,SortedMap用来存储可排序数据,且在1.2版本TreeMap是作为SortedMap直接实现类实现的;
1.4版本
此版本中主要新增了HashMap的实现类LinkedHashMap,HashSet的实现类LinkedHashSet;
LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法,是线程不安全的容器;
LinkedHashSet是一个基于LinkedHashMap实现的有序去重集合列表。
-
LinkedHashSet中的元素没有重复
-
LinkedHashSet中的元素有顺序,维护了添加顺序
-
LInkedHashSet可以存储null值
-
LinkedHashSet是一个线程不安全的容器
1.5版本
此版本新增JUC包下的集合和Queue接口,以及在顶级接口Collection上方新增了Iterable接口,Iterable接口下所有集合都可以通过迭代器迭代;
Queue(对接)在此版本主要实现了BlockingQueue(阻塞队列)以及BlockingQueue下的ArrayBlockingQueue(基于数组实现的队列),DelayQueue(延迟队列);
JUC中的4个常用实现类,ConcurrentLinkedQueue是一个基于链表的无界队列,没有上限的队列。CopyOnWriteArrayList是ArrayList的并发支持类,底层基于读写分离思想实现,适用于读大于写场景。CopyOnWriteArraySet是Set的并发支持类,底层基于CopyOnWriteArrayList实现,适用于读大于写场景。ConcurrentHashMap看下面的单独详情介绍
1.6版本
此版本新增了Deque(双向队列),SortedSet和SortedMap的实现类NavigableSet和NavigableMap;
Deque主要实现类ArrayDeque,是基于数组实现的双向队列,同时让LinkedList也实现了Deque,表示可以用链表实现队列结构;
SortedSet新增实现类NavigableSet,并且将TreeSet调整为NavigableSet的实现类;
SortedMap新增实现类NavigableMap,并且将TreeMap调整为NavigableMap的实现类;