当前位置: 首页 > news >正文

java 集合总结

 文章目录

目录

文章目录

前言

一、泛型的作用

1.类型安全

2.通用性

这里再举个例子

二、泛型的实现

1.泛型类

2.泛型接口

3.泛型方法

4.T符号的起源(额外)

三、泛型擦除

四、泛型通配符

1.上界通配符( )

为什么用于读取?

2. 下界通配符( )

为什么用于写入?

3. 无界通配符( )

​​语法特点​​

?和T

总结

举例

五、泛型限制与注意事项


前言

集合(Collections) 是用于存储、管理和操作一组数据的容器,其核心作用是为开发者提供高效、灵活和标准化的数据管理方案


一、Collection

1.List

1.ArrayList

底层是数组,新增修改都是基于copy数组的形式,查询就是基于索引

详细请看从底层认识ArrayList

2.LinkedList

底层是以及静态内部类Node对象,通过前后指针指向不同节点,形成双向链表,查询数据需要从头或尾遍历链表,新增,修改,删除,也需要遍历到指定位置,后续直接改指针指向就行

详细请看LinkedList

3.CopyOnWriteArrayList(安全)

允许多线程读,不允许多线程同时写,底层就是在写的时候加了一个synchronized (lock) {} 锁代码块,保证线程安全,而读没加锁,其他的和ArrayList大同小异

4.Vector

过时了,直接加的方法锁,效率太低

List集合对比

实现类底层结构线程安全特点适用场景
ArrayList动态数组随机访问快(O(1)),增删中间元素慢(需移动元素,O(n))频繁查询,少增删
LinkedList双向链表增删快(O(1)),随机访问慢(需遍历,O(n))频繁头尾操作,需实现队列/栈
CopyOnWriteArrayList动态数组 + 写时复制读操作无锁,写操作复制新数组;读多写少性能高,写多时内存开销大高并发读,极少写(如监听器)

2.Set

1.HashSet

底层其实就是HashMap,存储的k,v值,直接调用HashMap中的方法。但是每次新增的时候v值是固定的,这就导致插入数组和链表时候相同k的数据会覆盖,导致值唯一

详细看HashSet

2.LinkedHashSet

底层是LinkedHashMap(看下面),和HashSet一样v固定,存的是k值

3.TreeSet

底层红黑树,自然有序,key值不重复

4.CopyOnWriteArraySet

基于CopyOnWriteArrayList,新增的时候循环判断是否存在数据

Set集合对比
实现类底层结构线程安全特点适用场景
HashSet基于 HashMap无序,快速插入、删除、查找(O(1))去重且无需顺序
LinkedHashSet链表 + HashMap维护插入顺序,性能略低于 HashSet需保持插入顺序的去重场景
TreeSet红黑树自然排序或自定义排序,查找/插入/删除 O(log n)需有序且去重的场景
CopyOnWriteArraySet基于 CopyOnWriteArrayList读多写少性能好,写操作效率低类似 CopyOnWriteArrayList
ConcurrentSkipListSet跳表(SkipList)有序,高并发下性能优于 TreeSet高并发有序集合

注意:set所谓的无序指的是实现的Set接口的默认实现(HashSet,TreeSet(自然有序)) ,而且无序是指的按插入顺序,自然List的有序也指的插入顺序(3,1,2)对应的查询顺序(3,1,2),而不是自然有序(1,2,3)

3.deque

继承自 Queue,支持两端操作(队尾,队首进行操作)

1.ArrayDeque

Queue接口的实现

2.ConcurrentLinkedDeque(安全)

没有复合操作,直接使用CAS来保证线程安全

4.queue

遵循FIFO(先进先出)原则的队列

1.PriorityQueue(支持有序)

元素按自然顺序或Comparator定义的顺序排序。

2.ConcurrentLinkedQueue(安全)

CAS来控制线程安全

二、Map

1.HashMap

底层是数据加链表(红黑树)的信息,无序,key不能重复,Value可重复

详情看HashMap

2.LinkedHashMap

底层就是HashMap,只不过多维护了一个双向链表结构(保证插入有序),简单来说每次新增的数据加入一个双向链表来维护顺序,不懂的看下面这篇文章

LinkedHashMap

3.Treemap

底层是红黑树,保证顺序(这里的顺序是自然顺序和key值相关),和LinkedHashMap顺序不同
详细看TreeMap

4.ConcureentHashMap(安全)

底层就是实现的HashMap,只不过加了sychronried锁,锁住了每一个桶(链表),数组不用锁,因为没有公共遍历处理,只有桶中可能会出现重复的key,会出现覆盖

5.ConcurrentSkipListMap

维护多层级的链表,是空间换时间的数据结构,链表构建时候层数生成随机,插入时候层数也随机,插入到生成层数及以下的层数中去,查询从高到低判断左右节点

Map集合对比
实现类底层结构线程安全特点适用场景
HashMap数组+链表/红黑树快速查找(O(1)),链表过长转红黑树(O(log n))通用键值存储,无需顺序
LinkedHashMap链表 + HashMap维护插入顺序或访问顺序需保留插入顺序(如 LRU 缓存)
TreeMap红黑树按键自然排序或自定义排序,操作 O(log n)需有序键的场景
Hashtable数组+链表全表锁,性能差遗留代码,不推荐使用
ConcurrentHashMapHashMap+CAS + synchronized高并发优化,锁粒度细 CAS + synchronized)高并发键值存储
ConcurrentSkipListMap跳表有序,高并发下性能优于 TreeMap高并发有序键值存储


http://www.xdnf.cn/news/565453.html

相关文章:

  • 小黑黑prompt表述短语积累1
  • 作物遗传与种质创新利用全国重点实验室-随笔10
  • CNN vs ViT:图像世界的范式演进
  • 【npm】npm命令大全
  • C#开发利器:SharpBoxesCore全解析
  • 智能门锁为什么需要做欧盟网络安全 EN18031 标准检测认证
  • osgEarth中视角由跟随模式切换到漫游模式后没有鼠标拖拽功能问题分析及解决方法
  • CICD遇到npm error code EINTEGRITY的问题
  • Ntfs!ATTRIBUTE_RECORD_HEADER结构$INDEX_ROOT=0x90的一个例子
  • SQL语句-常用版
  • Python学习——执行python时,键盘按下ctrl+c,退出程序
  • 系分论文《论软件系统安全分析和应用》
  • 如何使用deepseek帮助自己的工作
  • Dynamics 365 Business Central Azure application registration
  • 【泛微系统】后端开发Action常用方法
  • 新浪、京东golang一面整理
  • 大模型微调与高效训练
  • 网络安全-等级保护(等保) 2-0 等级保护制度现行技术标准
  • Debian重装系统后
  • JS进阶学习04
  • 红蓝对抗中的网络安全设备操作手册
  • 算法竞赛板子
  • 强化学习鱼书(7)——神经网络和Q学习
  • 探究国际数字影像产业园人才培育高地的建设成效​
  • vue3+uniapp中使用高德地图实现撒点效果
  • Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中
  • 双检锁(Double-Checked Locking)单例模式
  • Axure应用交互设计:动态面板嵌套实现超强体验感菜单表头
  • Jenkins (七) - Docker Harbor
  • DeepSeek赋能智能家居:构建高智能、低延迟的物联网生态