A Guide to Collections

优秀文档

digitalocean Collections
baeldung Collections
码神爆肝数据结构——总长5w字,附带例题

[Q&A] 为什么要使用集合?

数组声明之后, 长度不可变,数据类型也不可变。存储特点为 有序可重复,特点单一。
集合可以 存储不同类型,不同数量的对象

[Q&A] 什么是无序性?

无序性是指存储的数据在底层数组中并非按照 数组索引的顺序添加,而是根据 数据的哈希值决定的。

[Q&A] 什么是不可重复性?

不可重复性是指添加的元素时,不仅仅equals还要hashCode同时相等才相等。

Collection接口架构图

在这里插入图片描述

CollectionKey-ValueOrderingDuplicate ElementsRandom AccessNull ElementThread Safety
键值对有序可重复随机读取允许存null线程安全
ArrayList
Vector
LinkedList
Stack
CopyOnWriteArrayList
HashSet
LinkedHashSet
TreeSet
CopyOnWriteArraySet
ConcurrentSkipListSet
HashMap
LinkedHashMap
TreeMap
ConcurrentHashMap
Hashtable
Properties

[Q&A] 如何选用集合?

如果你知道是Set,但是不知道是哪个Set,就用HashSet。
如果你知道是List,但是不知道是哪个List,就用ArrayList。
如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

key-value形式的数据结构时,选Map
特点:key不重复, value随意

HashMap               key无序                        数组+链表/红黑树            k,v均可为null
HashTable             key无序                        数组+链表                  k,v均不可为null  线程安全
LinkedHashMap         key FIFO                      数组+链表/红黑树+双向链表
TreeMap               Key自定义排序,默认升序          红黑树

ConcurrentHashMap     相当于线程安全的HashMap         数组+链表/红黑二叉树
ConcurrentSkipListMap 相当于线程安全的TreeMap
保证元素唯一时,选Set
特点:不重复

HashSet                无序                         基于HashMapKey实现
LinkedHashSet	       有序 FIFO                    基于LinkedHashMap实现 
TreeSet                自定义排序,默认升序          基于TreeMap红黑树

CopyOnWriteArraySet    相当于线程安全的HashSet       高并发类
ConcurrentSkipListSet  相当于线程安全的TreeSet       高并发类
不需要保证元素唯一时,就选List
特点:有序可重复

ArrayList               FIFO    更适合遍历          底层使用 Object[]存储    
Vector	                FIFO    更适合遍历          底层使用 Object[]存储    线程安全
LinkedList              FIFO    更适合插入删除      双向链表                
Stack                   LIFO 
                                           
CopyOnWriteArrayList    相当于线程安全的ArrayList                  

Map

⭐️ Java初始化map的几种方式
⭐️ Java创建空map的几种方法
⭐️ Java创建不可变map的几种方法
⭐️ Java如何删除map中的元素

⭐️ Java HashMap/LinkedHashMap/TreeMap/HashTable原理解析
⭐️ HashTableHashMap区别
⭐️ 如何创建线程安全的Map
⭐️ Collections.synchronizedMapConcurrentHashMap区别

⭐️ Java中HashMap常用方法
1・key相同时,value覆盖原来的而不是拒绝存入和set相反。
⭐️ Java中EnumMap常用方法
⭐️ Java中LinkedHashMap常用方法


List

⭐️ Java中ArrayList常用方法
1・存取元素时间复杂度为O(1)
2・增删元素时间复杂度为O(n)
3・查询元素时间复杂度为O(log n)(已排序的),O(n) (未排序的)
Further Reading :时间复杂度函数图像

⭐️ Arrays.asList()new ArrayList()区别
⭐️ Arrays.asList()List.of() 区别
⭐️ java中删除list元素的几种方法
⭐️ Java 中 List 集合取交集 我有你也有
⭐️ Java 中 List 集合取并集 你我都有啥
⭐️ Java 中 List 集合取差集 我有你没有
⭐️ Java 中 List 集合取补集 除了我你还有啥


Set

HashSet
LinkedHashSet
⭐️TreeSet

1・HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序。
2・HashSet无序,LinkHashSet保证FIFO,TreeSet内部实现排序,也可以自定义排序。
3・HashSet和LinkHashSet允许存null,TreeSet插入null会报NullPointerException。
4・三者都非线程安全,如果要使用线程安全可以Collections.synchronizedSet()

Deque

⭐️Deque的三种用途

Stack

⭐️Stack常用方法

Queue

⭐️ Queue常用方法
⭐️优先队列PriorityQueue介绍
⭐️Java中的阻塞队列

遍历

⭐️ Java 数组 双指针遍历场景
⭐️ Java List的7种遍历及性能对比
⭐️ Java Set的6种遍历及性能对比
⭐️ Java Map的18种遍历及性能对比
⭐️ Java Properties的4种遍历方式

排序

⭐️ 数组・List・Map・TreeSet排序总结

数组

Java 数组 常用方法


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值