【Java核心基础知识】01 - Java集合

2023-10-29  本文已影响0人  Liuzz25

集合类型分为3种:Collection、Iterator、Map,均存放于Java.util包中。

1.Collection:集合,List、Set、Queue的最基本的接口
2.Iterator:迭代器,ListIterator、
3.Map:映射,SortedMap、ConcurrentMap、AbstractMap的最基本的接口。

集合框架

1 Collection

1.1 List
1.1.1 ArrayList
1.排列有序,可重复。
2.底层使用数组。
3.适合随机查找和遍历,增删慢。
4.线程不安全,多线程下不建议使用ArrayList。
5.当容量不够事,ArrayList默认容量增加0.5倍。
1.1.2 Vector
1.排列有序,可重复。
2.底层使用数组。
3.适合随机查找和遍历,增删慢。
4.线程安全,效率比ArrayList低。
5.当容量不够时,Vector默认容量增加1倍。
1.1.3 LinkedList
1.排列有序,可重复。
2.底层使用双向循环链表。
3.查找速度慢,增删快,适合动态插入和删除。
4.线程不安全。
1.2 Set
1.2.1 HashSet
1.排列无序,不可重复。
2.存储结构基于哈希表。
3.存取速度快。
4.非线程安全。
1.2.2 TreeSet
1.排列有序,不可重复。
2.存储结构基于红黑树。
3.排序存储,按照元素的自然顺序或者自定义顺序排序。
4.非线程安全。
1.2.3 LinkedHashSet
1.排列有序,不可重复。
2.采用Hash表存储,并使用双向链表记录插入顺序。
3.内部是LinkedHashMap。
4.线程安全。
1.3 Queue
Queue(队列)是一种特殊的线性表
只允许在表的前端(front)进行删除操作
在表的后端(rear)进行插入操作
它遵循FIFO(First-In-First-Out,先进先出)的原则

Java提供了多种Queue的实现,包括以下几种:

2.Map

2.1 HashMap
1.允许键值为空。
2.线程不安全。
3.底层:哈希表+数组+链表+红黑树(JAVA8后,链表元素大于8个时)。
4.使用Iterator来遍历。
5.多线程环境下,可以使用ConcurrentHashMap或者Collections.synchronizedMap进行替换。
6.在插入、删除和查找元素时,时间复杂度都为O(1)。
2.2 ConcurrentHashMap
1.允许键值为空。
2.线程安全(concurrencyLevel默认值16,理论上最多可以同时支持 16 个线程并发写)。
3.底层:基于Segment数组的分段锁机制+链表+红黑树(JAVA8后,链表元素大于8个时)。
4.使用Iterator来遍历。
5.在插入、删除和查找元素时,时间复杂度都为O(1)。
2.3 HashTable
1.不允许键值为空。
2.线程安全(继承Dictionary类,只能一个线程,并发性不如ConcurrentHashMap)。
3.底层哈希表+数组+链表。
4.使用Iterator来遍历。
5.在插入、删除和查找元素时,时间复杂度都为O(1)。
2.4 TreeMap
1.允许键值为空(键值必须实现Comparable接口或在构造TreeMap传入自定义Comparator)。
2.线程安全性介于HashMap和HashTable之间。
3.底层二叉树。
4.在插入、删除和查找元素时,时间复杂度都为O(1)。
上一篇下一篇

猜你喜欢

热点阅读