Skip to main content

java集合框架知识图谱

moremind...About 5 minJava-CollectionJava-Collection

集合关系图谱

Java集合框架包括Collection和Map,Collection主要用于存储对象,Map主要用用于存储键值对数据。
Java-Collection

介绍

容器,就是可以容纳其他Java对象的对象。*Java Collections Framework(JCF)*为Java开发者提供了通用的容器,其始于JDK 1.2,优点是:

  • 降低编程难度
  • 提高程序性能
  • 提高API间的互操作性
  • 降低学习难度
  • 降低设计和实现相关API的难度
  • 增加程序的重用性
    Java容器里只能放对象,对于基本类型(int, long, float, double等),需要将其包装成对象类型后(Integer, Long, Float, Double等)才能放到容器里。很多时候拆包装和解包装能够自动完成。这虽然会导致额外的性能和空间开销,但简化了设计和编程。

Collection

List

ArrayList简介

1.ArrayList继承自AbstractList,实现了ListRandomAccessCloneableSerializable接口。

2.底层基于动态数组实现容量大小动态变化(容量可自动增长)。

3.允许null的存在。

4.ArrayList是支持快速访问、复制、序列化的。基于动态数组实现,支持。

5.ArrayList是非同步的。

6.ArrayList的iterator和listIterator方法返回的迭代器是fail-fast的。

LinkedList

1.LinkedList继承自AbstractSequentialList,实现了ListDequeCloneableSerializable接口,LinkedList是基于链表实现的,只能顺序访问。

2.LinkedList插入和删除方面要优于ArrayList

3.LinkedList是非同步的。

4.LinkedList的iterator和listIterator方法返回的迭代器是fail-fast的。

Set

Hashset

1.HashSet继承自AbstractSet,实现了SetCloneableSerializable接口,底层是一个HashMap。

2.HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashCode与equals方法。

3.HashSet中元素都是无序的(即存取顺序不一致);

4.HashSet没有下标选取,只能通过增强for循环或者迭代器取出元素;

5.HashSet是非同步的;

6.HashSet的iterator方法返回的迭代器是fail-fast的。

LinkedHashSet

1.LinkedHashSet继承自HashSet,实现了SetCloneable接口,底层其实是一个LinkedHashMap。

2.不能保证插入和输出的顺序一致。

3.不允许重复的元素插入,可以插入null。

4.HashSet的iterator方法返回的迭代器是fail-fast的。

TreeSet

1.TreeSet继承自AbstractSet,实现了NavigableSet、Cloneable、Serializable接口。

2.一种基于TreeMapNavigableSet实现,意味着它支持一系列的导航方法。

3.TreeSet是有序的Set集合,通过TreeMap实现的一个有序的、不可重复的集合,底层维护的是红黑树结构。

4.TreeSet的iterator方法返回的迭代器是fail-fast的。

Queue

ArrayDeque

1.ArrayDeque是Deque接口的一个实现,使用了可变数组,所以没有容量上的限制。

2.ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用。

3.ArrayDeque是Deque的实现类,可以作为栈来使用,效率高于Stack;
也可以作为队列来使用,效率高于LinkedList。

4.ArrayDeque不支持null值。

5.ArrayDeque的iterator方法返回的迭代器是fail-fast的。

6.ArrayDeque两端都可以操作,支持双向迭代器遍历。

PriorityQueue

1.PriorityQueue继承自AbstractQueue,实现了Serializable接口。

2.PriorityQueue队列元素根据自然排序或者根据具体的比较器排序。

3.PriorityQueue实例化时若未指定初始容量,默认容量为11。

4.PriorityQueue自动扩容。如果容量小于64,两倍增长扩容;否则增长50%,PriorityQueue是无边界容器。

5.PriorityQueue的迭代器不具有以特定顺序访问队列元素。

6.PriorityQueue不支持null元素。

7.PriorityQueue入队出队的时间复杂度O(log(n))

Map

HashMap

1.HashMap继承自AbstractMap,实现MapCloneableSerializable接口。

2.HashMap 基于哈希表的Map接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。

3.HashMap 的实现不是同步的,这意味着它不是线程安全的。

4.HashMap 中的映射不是有序的(即存取顺序不一致)。

5.JDK1.5-JDK1.7实现的结果是数组+链表,JDK1.8实现结构是数组+链表+红黑树。

6.HashMap key值能为null,value值可以为null,且key值不允许重复。

7.HashMap的iterator方法返回的迭代器是fail-fastl的。

LinkedHashMap

1.LinkedHashMap继承自HashMap,实现了Map接口。

2.LinkedHashMap维护了一个Entry的双向链表,保证了插入的Entry中的顺序。

3.使用双向链表来维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)顺序。

4.LinkedHashMap的iterator方法返回的迭代器是fail-fastl的。

TreeMap

1.TreeMap 继承自AbstractMap,实现了NavigableMapCloneableSerializable接口

2.TreeMap不允许出现重复的key。

3.TreeMap可以插入null键,null值。

4.TreeMap可以对元素进行排序。

5.TreeMap无序集合(插入和遍历顺序不一致)。

6.TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。

7.TreeMap的iterator方法返回的迭代器是fail-fastl的。

HashTable

1.与HashMap一样,Hashtable也是一个散列表,是以key-value存储形式存在,即主要用来存放键值对;

2.与HashMap不同,Hashtable的函数都是同步的,这意味着它是线程安全的;

3.Hashtable的key、value都不可以为null,并且,Hashtable中的映射不是有序的;

4.实现结构是数组+单向链表。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8