Java集合

9/1/2022 Java

# 集合

# Collection

# List

# ArrayList

(数组)

# LinkedList

(链表)

# Vector

(数组实现、线程同步)

# Set

# HashSet

(Hash 表)(底层由HashMap实现)

# TreeSet

(二叉树)

底层红黑树,支持自定义排序规则

# LinkedHashSet

(HashSet+LinkedHashMap)

# Queue

(单端队列,满足FIFO)

# Deque
# LinkedList

(基于链表)

基于链表,支持存储Null,1.2存在,每次申请堆空间

# ArrayDeque

(基于数组)

基于可变长数组和双指针,不支持存储NULL,1.6引入,可能扩容,实现队列更好好

# PriorityQueue

(基于堆)

优先级最高的元素先出队,利用了二叉堆,时间复杂度logn,不支持存储 NULL 和 non-comparable 的对象,默认是小顶堆,可接收 Comparator 定义元素优先级的先后

# Map

# HashMap

(数组+链表+红黑树)

(可以存储 null 的 k和 v,容量初始16,2n,指定大小将其扩充为 2 的幂次方大小)使用 Collections.synchronizedMap() 方法来包装我们的 HashMap,底层数据结构是数组+链表/红黑树,负载因子0.75,超过size*0.75就扩容,只有大小为2次幂时,才能合理用位运算替代取模(高效),数组>64&&链表>8,链表变红黑树,红黑树<6,红黑树变链表,取余(%)操作中如果除数是 2 的幂次则等价于与其除数减一的与(&)操作(也就是说 hash%length==hash&(length-1)的前提是 length 是 2 的 n 次方;)。” 并且 采用二进制位操作 &,相对于%能够提高运算效率,

# TreeMap

(可排序)

红黑树,可排序,通过Comparator排序,对集合中的元素根据键排序的能力以及对集合内元素的搜索的能力

# LinkedHashMap

(记录插入顺序)

底层数据结构是数组+链表/红黑树+双向链表,插入有序

# HashTable

(安全)

方法基本都经过synchronized 修饰,被淘汰,不允许有 null 键和 null 值,容量初始11,2n+1,使用 synchronized 来保证线程安全,效率非常低下

# Collections

# 排序

reverse(List list)//反转

sort(List list)//按自然排序的升序排序

sort(List list, Comparator c)//定制排序

# 查找替换

fill(List list, Object obj)//用指定的元素代替指定list中的所有元素

replaceAll(List list, Object oldVal, Object newVal)//用新元素替换旧元素

# 同步控制

synchronizedXxx()

Last Updated: 4/15/2023, 1:36:11 AM