Java集合框架详解

天线学习笔记——HFSS简单阵列天线 在HFSS15.0版本中使用 Radiation --> Antenna Array Setup 设置天线阵列的参数时的设计列表如下: 值得注意的是,在该版本中所定义的是:第一个阵元的位置坐标(First Cell Position)、阵元之间的间距(Directions)和阵元的数量(Number of Cells) 这些参数。 在ANSYS中的HFSS仿真中定义天线阵列如下: 与老版本不同的是:中心点坐标(Center Position)和布局设置(Layout Setting)。在布局设置中 阅读详情

一、为什么要有集合?

Student[] arr = new Student[10];
// 问题1:长度不可变
arr[11] = new Student();  // 数组越界异常
// 问题2:不便于删除、添加
// arr.remove();  // 数组没有这些方法
// arr.add();

二、集合的体系结构

Collection接口:单列集合的顶级接口
    |-- List接口:有序、可重复、有索引
        |-- ArrayList类:底层是动态数组,查询快、增删慢
        |-- Vector类:线程安全的ArrayList(已过时,不推荐使用)
        |-- LinkedList类:底层是双向链表,增删快、查询慢
        |-- Stack类:栈结构,继承自Vector
    |-- Set接口:不可重复
        |-- HashSet类:基于HashMap实现,无序
            |-- LinkedHashSet:基于LinkedHashMap实现,有序
        |-- TreeSet类:基于红黑树实现,可排序
        |-- EnumSet类:枚举专用Set
        |-- CopyOnWriteArraySet:线程安全的Set

Map接口:key-value键值对集合
    |-- HashMap类:基于哈希表,无序
        |-- LinkedHashMap:有序的HashMap
    |-- TreeMap类:基于红黑树,可排序
    |-- Hashtable:线程安全的HashMap,不允许null键值
        |-- Properties:属性文件操作专用
    |-- ConcurrentHashMap:高并发场景下的线程安全Map
    |-- WeakHashMap:弱引用Map
    |-- IdentityHashMap:使用==代替equals比较
    |-- EnumMap:枚举专用Map

三、Collection接口

是什么?

  • 单列集合的顶级接口

  • 定义了单列集合的通用方法

常用方法:

  • boolean add(E e):添加元素

  • boolean remove(Object o):删除指定元素

  • int size():返回元素个数

  • boolean isEmpty():判断是否为空

  • boolean contains(Object obj):判断是否包含元素

  • Iterator<E> iterator():返回迭代器

  • void clear():清空集合

  • boolean containsAll(Collection<?> c):是否包含指定集合所有元素

  • boolean addAll(Collection<? extends E> c):添加指定集合所有元素

  • boolean removeAll(Collection<?> c):删除指定集合所有元素

  • boolean retainAll(Collection<?> c):保留指定集合中的元素

  • Object[] toArray():转换为数组

  • <T> T[] toArray(T[] a):转换为指定类型数组

  • default Stream<E> stream():返回流(JDK8+)

  • default Stream<E> parallelStream():返回并行流(JDK8+)

四、List接口

是什么?

  • Collection的子接口

  • 有序、可重复、有索引

特有方法:

  • void add(int index, E element):指定位置插入元素

  • E get(int index):获取指定位置元素

  • E set(int index, E element):修改指定位置元素

  • E remove(int index):删除指定位置元素

  • int indexOf(Object o):返回首次出现的索引

  • int lastIndexOf(Object o):返回最后出现的索引

  • ListIterator<E> listIterator():列表迭代器

  • List<E> subList(int fromIndex, int toIndex):截取子列表

实现类详解:

1. ArrayList

  • 数据结构:动态数组

  • 初始容量:10

  • 扩容机制:1.5倍扩容

  • 优点:

    • 随机访问快(O(1))

    • 尾部添加效率高

  • 缺点:

    • 增删元素需要移动元素,效率低

    • 内存空间连续,需要大块连续内存

  • 线程安全:不安全

  • 使用场景:查询多、增删少的场景

// ArrayList源码关键点
transient Object[] elementData;  // 实际存储数组
private int size;  // 元素个数
private static final int DEFAULT_CAPACITY = 10;  // 默认初始容量

2. LinkedList

  • 数据结构:双向链表

  • 优点:

    • 增删元素快(O(1))

    • 内存空间不连续

  • 缺点:

    • 随机访问慢(O(n))

  • 线程安全:不安全

  • 特有方法:

    • addFirst(E e)/ addLast(E e)

    • getFirst()/ getLast()

    • removeFirst()/ removeLast()

  • 使用场景:增删多、查询少的场景

// LinkedList源码关键点
private static class Node<E> {
    E item;
    Node<E> next;
    Node<E> prev;
}
transient Node<E> first;  // 头节点
transient Node<E> last;   // 尾节点

3. Vector

  • 数据结构:动态数组

  • 初始容量:10

  • 扩容机制:2倍扩容

  • 优点:线程安全(方法都加了synchronized)

  • 缺点:性能差

  • 替代方案:使用Collections.synchronizedList()或CopyOnWriteArrayList

  • 子类:Stack(栈结构)

4. CopyOnWriteArrayList(重要)

  • 特点:写时复制,线程安全

  • 原理:写操作时复制新数组,读操作无锁

  • 优点:读性能高,适合读多写少场景

  • 缺点:内存占用大,数据一致性弱

  • 使用场景:高并发读,低并发写

五、Set接口

是什么?

  • Collection的子接口

  • 不可重复,最多一个null元素

  • 无索引

实现类详解:

1. HashSet

  • 数据结构:数组+链表+红黑树(JDK8+)

  • 底层实现:基于HashMap

  • 特点:无序、不重复

  • 允许null:允许一个null元素

  • 线程安全:不安全

  • 重要参数:

    • 默认初始容量:16

    • 负载因子:0.75f

    • 树化阈值:8

    • 退化阈值:6

    • 最小树化容量:64

2. LinkedHashSet

  • 数据结构:数组+双向链表

  • 底层实现:基于LinkedHashMap

  • 特点:有序(插入顺序)、不重复

  • 优点:既保证了Set的特性,又保持了插入顺序

  • 使用场景:需要保持插入顺序的Set

3. TreeSet

  • 数据结构:红黑树

  • 特点:可排序、不重复

  • 排序方式:

    • 自然排序:元素实现Comparable接口

    • 定制排序:创建时传入Comparator

  • 线程安全:不安全

  • 使用场景:需要排序的Set

六、Map接口

是什么?

  • 双列集合,key-value键值对

  • key不可重复,value可重复

  • 一个key对应一个value

常用方法:

  • V put(K key, V value):添加/修改

  • V remove(Object key):删除

  • V get(Object key):获取

  • boolean containsKey(Object key):是否包含key

  • boolean containsValue(Object value):是否包含value

  • int size():元素个数

  • Set<K> keySet():获取所有key

  • Collection<V> values():获取所有value

  • Set<Map.Entry<K, V>> entrySet():获取所有键值对

  • default V getOrDefault(Object key, V defaultValue):获取或默认值

  • default void forEach(BiConsumer<? super K,? super V> action):遍历

实现类详解:

1. HashMap

  • 数据结构:数组+链表+红黑树(JDK8+)

  • 特点:无序、允许null键值

  • 线程安全:不安全

  • 重要参数:

    • 默认初始容量:16

    • 默认负载因子:0.75

    • 扩容阈值:容量*负载因子

    • 树化阈值:8

    • 退化阈值:6

    • 最小树化容量:64

// HashMap底层原理详解
/**
 * 存储过程:
 * 1. 计算key的hash值:hash = (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
 * 2. 计算索引:index = (n - 1) & hash
 * 3. 如果该位置为空,直接放入
 * 4. 如果该位置不为空:
 *    a. 比较hash值和equals,相同则替换
 *    b. 如果是树节点,放入红黑树
 *    c. 如果是链表,遍历到尾插入
 * 5. 判断链表长度是否>=8,是则转为红黑树
 */

/**
 * 扩容机制:
 * 1. 当size > threshold时扩容
 * 2. 新容量 = 旧容量 * 2
 * 3. 重新计算所有元素的位置
 * 4. 如果是树节点,判断是否需要拆分为链表
 */

2. LinkedHashMap

  • 数据结构:数组+双向链表

  • 特点:有序(插入顺序或访问顺序)

  • accessOrder参数:

    • false:插入顺序(默认)

    • true:访问顺序(适合实现LRU缓存)

  • 继承关系:继承HashMap

  • 使用场景:需要保持顺序的Map

3. TreeMap

  • 数据结构:红黑树

  • 特点:可排序

  • 排序方式:

    • 自然排序:key实现Comparable

    • 定制排序:传入Comparator

  • 线程安全:不安全

  • 使用场景:需要排序的Map

4. Hashtable

  • 特点:线程安全、不允许null键值

  • 与HashMap区别:

    • 线程安全(方法加synchronized)

    • 不允许null键值

    • 初始容量11,扩容2n+1

    • 继承Dictionary(已过时)

  • 替代方案:使用ConcurrentHashMap

七、工具类

1. Collections

  • 排序:sort(), reverse(), shuffle()

  • 查找:binarySearch(), max(), min()

  • 同步包装:synchronizedList(), synchronizedSet(), synchronizedMap()

  • 不可变集合:unmodifiableList(), unmodifiableSet(), unmodifiableMap()

  • 单元素集合:singletonList(), singletonSet(), singletonMap()

  • 空集合:emptyList(), emptySet(), emptyMap()

2. Arrays

  • 数组转集合:asList()

  • 排序:sort()

  • 二分查找:binarySearch()

  • 填充:fill()

  • 比较:equals()

  • 字符串:toString()

八、迭代器

1. Iterator

// 基本使用
Iterator<String> it = list.iterator();
while(it.hasNext()) {
    String s = it.next();
    it.remove();  // 安全删除
}

2. ListIterator

// 双向遍历
ListIterator<String> lit = list.listIterator();
while(lit.hasNext()) {
    String s = lit.next();
}
while(lit.hasPrevious()) {
    String s = lit.previous();
}

3. fail-fast机制

  • 快速失败机制

  • 遍历时修改集合会抛出ConcurrentModificationException

  • 原理:比较modCount和expectedModCount

九、性能对比

集合类

数据结构

查询

增删

线程安全

有序

允许null

ArrayList

数组

O(1)

O(n)

否

插入序

是

LinkedList

链表

O(n)

O(1)

否

插入序

是

HashSet

哈希表

O(1)

O(1)

否

无序

是

LinkedHashSet

哈希表+链表

O(1)

O(1)

否

插入序

是

TreeSet

红黑树

O(log n)

O(log n)

否

排序序

否

HashMap

哈希表

O(1)

O(1)

否

无序

是

LinkedHashMap

哈希表+链表

O(1)

O(1)

否

插入序

是

TreeMap

红黑树

O(log n)

O(log n)

否

排序序

否

ConcurrentHashMap

分段锁/红黑树

O(1)

O(1)

是

无序

否

十、使用建议

  1. 单列集合选择:

    • 需要唯一性:Set

    • 需要顺序、可重复:List

    • 需要排序:TreeSet/TreeMap

    • 需要保持插入顺序:LinkedHashSet/LinkedHashMap

  2. 多线程环境:

    • 高并发读:CopyOnWriteArrayList/CopyOnWriteArraySet

    • 高并发读写:ConcurrentHashMap

    • 低并发:Collections.synchronizedXXX()

  3. 内存考虑:

    • 内存敏感:EnumSet/EnumMap

    • 大容量:ArrayList(连续内存)

  4. 性能优化:

    • 预估容量,避免频繁扩容

    • 选择合适的负载因子

    • 合理实现hashCode()和equals()

十一、常见面试题

  1. ArrayList和LinkedList区别?

  2. HashMap的put过程?

  3. ConcurrentHashMap原理?

  4. HashMap和Hashtable区别?

  5. fail-fast和fail-safe机制?

  6. HashSet如何保证元素唯一?

  7. TreeMap排序原理?

  8. HashMap的负载因子为什么是0.75?

  9. ConcurrentHashMap1.7和1.8区别?

  10. 如何解决哈希冲突?

这个完整的集合框架总结涵盖了Java集合的所有重要实现类,包括它们的特性、使用场景和底层原理,适合发布到优快云等技术博客平台。

【Unity实战篇】| 游戏轮播图效果,多种实现思路及完整教程 在众多游戏的主界面、商城、图鉴或关卡选择界面中,我们常常能看到轮播图的身影。 它以动态、直观的方式展示游戏角色、皮肤、成就或场景,不仅极大地提升了界面的美观度和交互性,还能高效地引导玩家聚焦于核心内容。 本篇文章将从零开始,一步步在Unity中构建一个功能完备、性能优良的游戏轮播图。 使用UGUI系统,通过代码驱动,实现包括自动轮播、手动拖拽、分页指示器、无限循环等核心功能。 无论是UI新手还是希望优化现有方案的开发者,这篇文章都将为你提供清晰的思路和完整的解决方案。 阅读详情

相关推荐

编程小白的自学笔记四(正则表达式模块search函数)

本文仅仅简单介绍了search的使用,供小白学习探讨。

m0_49914128的博客 2320

详解java集合框架

文章目录一、集合框架详解1、Collection接口1)collection接口2)AbstractCollection抽象类3)SortedSet接口4)AbstractList和AbstractSet5)继承基类List的类6)继承基类Set的类2、Map接口二、集合的意义和使用1、意义2、使用1)线程安全PK性能高效2)链表PK数组3)重复pk单一4)有序pk无序 一、集合框架详解 下图转载自: https://blog.youkuaiyun.com/weixin_43314519/article/details

m0_51801058的博客 2026

qt使用qxlsx实现xlsx、xls表格文件快速写入和读取

新年第二篇文章,收尾一个去年计划中发表文章和实现功能。

kbq的博客 1万+

Java集合框架全面详解

集合框架是一个统一的架构,用于表示和操作集合,使集合能够独立于其实现细节进行操作。Java集合框架提供了一系列接口和类,用于存储、检索、操作和传输数据对象。尽管Java集合框架提供了丰富的实现,但有时您可能需要创建自定义的集合类。扩展现有集合类@Override@Override实现集合接口size = 0;@Override@Override@Override// 省略其他必要的方法实现...使用组合而非继承@Override。

qq_38830315的博客 2209

新手必看:电路设计里的‘地’到底怎么接?单点、多点、混合接地保姆级图解

本文深入解析电路设计中的接地技术,涵盖单点、多点和混合接地的原理与应用。通过详细的图解和实战案例,帮助新手理解接地在提供参考电位、构成电流回路及抑制电磁干扰中的关键作用,避免常见设计误区,提升电路稳定性与抗干扰能力。

weixin_28455801的博客 297

Java 集合框架详解

在 Java 编程中,集合框架是一个非常重要的组成部分。它提供了一组用于存储和操作集合的接口和类,使得开发者能够更加高效地处理数据。本文将详细介绍 Java 集合框架的各个方面。接口:定义了各种集合的行为和操作,如CollectionListSetMap等。实现类:实现了接口中定义的方法,提供了具体的集合实现,如ArrayListLinkedListHashSetTreeSetHashMapTreeMap等。算法:提供了一些用于对集合进行操作的算法,如排序、搜索等。

mailangduoduo的博客 1768

YOLOv13涨点改进| CVPR 2026 |独家创新首发、主干改进篇 |利用RIS-PiDiNet主干让YOLOv13更加强大!适合遥感目标检测、小目标检测、旋转目标检测,变化检测,图像分割涨点

🔥本文提出了一种改进的RIS-PiDiNet主干网络,通过引入几何先验构建几何一致性检测器,显著提升了模型在任意方向、结构规则目标场景下的检测性能。包含两个核心模块:S-PDC利用极谐变换的谐波核建模目标结构对称性,RIS-PDC通过SO(2)群平均实现旋转不变性。网络采用基于RIS-block的主干结构并融合轻量级LBP特征,增强了细粒度结构表达能力。实验表明,该方法特别适用于遥感和复杂几何分布场景,能有效提升目标检测的鲁棒性和精度。文章还详细介绍了如何将RIS-PiDiNet集成到YOLOv13框架

Ai缝合怪、助力小伙伴高效发论文 90

java集合框架详解

详解Java集合框架 List结构的集合类 ArrayList类,LinkedList类,Vector类,Stack类 ArrayList集合类的使用方法(无同步性,线程不安全) style="white-space:pre"> //ArrayList --- 实现了List接口,ArrayList是容量大小可变的数组的实现 ArrayLis

hello_zhou的博客 7700

第五章-AllData集成DataSophon作为数据平台功能

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。全新会员商业版 X 微信群:https://docs.qq.com/doc/DVHlkSEtvVXVCdEFo

AllDataDC的博客 1637

AI 学术科研与论文写作的正确打开方式!不套提示词模板,靠这个思路完美实现人机共创

真正的“人机共创”,也就是AI引导我思考的过程,如果你想用你的模糊需求,去写出专业化的学术内容,那是不可能的。对想快速完成某些学术任务的同仁来说,我们完全不用去抠提示词的细节,直接用魔法打败魔法,设计一段优化提示词的结构化提示词(提示词架构),辅助优化你的模糊需求。创建好之后,可以对它提你的任何模糊学术需求,比如写论文、写综述、学术润色等等,它绝不会直接帮你生成,而是先搞懂你的真实意图。以上整个流程,完全没有一句废话,先是思考,再是向你提问弄懂你的意图,最后整合你给出的关键信息,直接优化你给的模糊需求。

智能AI让学术科研更容易 477

Java—集合框架详解

一、描述Java集合框架   集合,在Java语言中,将一系类的对象看成一个整体。   首先查看jdk中的Collection类的源码后会发现Collection是一个接口类,其继承了java迭代接口Iterable. API: java集合框架图:   在图当中,虚线框的类型是接口,短横线框的类型是抽象类,实线框的类型是实现类。 集合的包在java.util下   集合框架...

weixin_30621959的博客 247

YOLOv11改进 | 添加注意力篇 | 结合2024最新Mamba注意力机制MLLA助力yolov11有效涨点含二次创新C2PSA(全网独家首发改进)

本文给大家带来的改进机制是结合号称超越Transformer架构的Mamba架构的最新注意力机制MLLA,本文将其和我们YOLOv11进行结合,的原理是通过将Mamba模型的一些核心设计融入线性注意力机制,从而提升模型的性能。具体来说,MLLA主要整合了Mamba中的“忘记门”(forget gate)和模块设计(block design)这两个关键因素,同时MLLA通过使用位置编码(RoPE)来替代忘记门,从而在保持并行计算和快速推理速度的同时,提供必要的位置信息。

Snu77的博客 3869

JAVA集合框架详解

JAVA集合框架详解 集合概述 概念:对象的容器,定义了对多个对象进行操作的常用方法。可以实现数组功能 和数组的区别: 1. 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型。 位置:java.util.*; Collection体系集合 Collection父接口 特点:代表一组任意类型的对象,无序、无下标、不能重复。 方法 boolean add(Object obj) //添加一个对象。 boolean addAll(Collection c) //将

guido 199

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java 集合框架 详解

一、Java 集合框架概述 集合框架是一个用来代表和操纵集合的统一架构(java集合框架位于java.util包中)。所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 算法:是实现集合接口的对象里的.

qq_37552636的博客 1144

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

集合框架 java_java的集合框架最全详解

java的集合框架最全详解(图)前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法。在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectio...

weixin_39852276的博客 97

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java 集合类框架详解_java集合框架,图文详解

随着时代的不断发展变化,大家对于新兴技术的关注度越来越高,越来越多的人开始学习新的知识。今天就来为大家介绍一下java的集合框架,并且通过生动的图片和详细的文字为大家解析。首先了解一下java集合类库,它将接口和实现分离。当程序使用集合的时侯,如果构建了集合就不需知道使用哪种实现。所以,只有在构建集合对象时,使用具体的类才有意义。可以使用接口类型存放集合的引用。利用这种方法,可以轻松使用另外一种不...

weixin_31845113的博客 225

java 集合类框架详解_Java集合框架详解

一 、java集合框架常用的构成体系接口:                   Collection                                  Map子接口:          List                 Set常用实现类:  ArrayList LinkedList Vector      HashSet LinkedH...

weixin_34646207的博客 162

Java中的集合框架详解

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!通过上述内容,我们详细介绍了Java中的集合框架,包括List、Set、Queue和Map的基本概念及其常用实现类的具体使用方法。Map接口是一个键值对集合,常用的实现类有HashMap、LinkedHashMap和TreeMap。List接口是有序集合,允许重复元素。TreeMap是一个有序的键值对集合,基于红黑树实现,按自然顺序或指定的比较器顺序排列键值对。Java集合框架是一个层次化的接口和类的集合,用于表示和操作集合。

微赚淘客系统开发者博客 1366

【Java】java 集合框架(详解)

📃个人主页:island1314⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞🔥 Java集合框架 提供了一系列用于存储和操作对象组的接口和类。这些工具是为了解决不同数据结构通用操作的需求而设计的。集合框架主要包括两种类型的容器:🌈 集合分为几个接口,主要有List、Set和 Queue常用接口的实现类如下:注意:Collection 是集合中的最基本接口,一般不直接使用该接口Map接口提供键到值的映射,不能包含重复的键,每个键最多只能映射到一个值。💦集合类中,如ArrayL

island1314的博客 1万+
上一篇: Java常用类详解:从Object到Random,一文掌握Java核心类库
下一篇: Java IO流详解
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值