JAVA关于集合的笔记

一、集合框架概述

  1. 定义:Java 集合是用于存储、管理和操作一组对象的容器,位于 java.util 包下,替代了早期的数组(数组长度固定,集合长度可变)。

​2. 核心接口:集合框架的顶层是 Collection 和 Map 两大接口,所有集合类都实现这两个接口或其子接口。

​3. 特点

​- 存储对象(不能直接存基本数据类型,需用包装类)

​- 动态扩容,无需手动指定长度

​- 提供丰富的操作方法(增删改查、排序、遍历等)

二、Collection 接口体系

Collection 是单列集合的根接口,存储单个元素,主要子接口有 List、Set、Queue。

  1. List 接口(有序、可重复)

元素按插入顺序排列,可通过索引访问,允许存储重复元素。

表格

实现类 特点 适用场景

ArrayList 底层是动态数组,查询快、增删慢(尾部增删除外),线程不安全 大量查询、少量增删的场景 。

LinkedList 底层是双向链表,查询慢、增删快,线程不安全 大量增删、少量查询的场景。

Vector 底层是动态数组,线程安全(方法加 synchronized ),效率低 多线程环境下的集合操作(已被 ArrayList 替代) 。

  1. Set 接口(无序、不可重复)

元素无索引,不允许存储重复元素,判断重复的依据是 equals() 和 hashCode() 方法。

表格

实现类 特点 适用场景

HashSet 底层是哈希表(数组+链表/红黑树),无序,查询增删快,线程不安全 快速去重、无需排序的场景 。

LinkedHashSet 底层是哈希表+双向链表,有序(插入顺序),线程不安全 去重且需要保留插入顺序的场景 。

TreeSet 底层是红黑树,可自然排序或自定义排序,线程不安全 去重且需要排序的场景 。

  1. Queue 接口(队列,先进先出 FIFO)

用于模拟队列结构,常用实现类:

  • LinkedList:实现了 Queue 接口,可作为队列使用

​- PriorityQueue:优先队列,元素按优先级排序,而非插入顺序

三、Map 接口体系(双列集合,键值对)

Map 是双列集合的根接口,存储 key-value 键值对,key 唯一,value 可重复,key 和 value 都可以是 null(HashMap 支持,Hashtable 不支持)。

表格

实现类 特点 适用场景

HashMap 底层是哈希表,无序,线程不安全,效率高 日常键值对存储,单线程环境 。

LinkedHashMap 底层是哈希表+双向链表,有序(插入顺序),线程不安全 键值对存储且需要保留插入顺序 。

TreeMap 底层是红黑树,key 可自然排序或自定义排序,线程不安全 键值对存储且需要按 key 排序 。

Hashtable 底层是哈希表,线程安全,效率低,不允许 key/value 为 null 多线程环境(已被 ConcurrentHashMap 替代) 。

四、集合的遍历方式

  1. Iterator 迭代器:通用遍历方式,支持在遍历中删除元素,适用于所有 Collection 集合。

  2. 增强 for 循环(foreach):语法简洁,不能在遍历中删除元素。

  3. 普通 for 循环:适用于 List 集合(可通过索引访问)。

  4. Map 集合的遍历

​- 方式1:遍历 key 集合,再获取 value

  • 方式2:遍历 entry 键值对(推荐,效率高)

五、Collections 工具类

java.util.Collections 是操作集合的工具类,提供静态方法:

  • sort(List list) :对 List 集合进行自然排序

​- shuffle(List list) :随机打乱 List 集合元素顺序

​- reverse(List list) :反转 List 集合元素顺序

​- synchronizedList(List list) :将线程不安全的 List 转为线程安全

相关推荐
AOwhisky4 分钟前
Linux(CentOS)系统管理入门笔记(第二十一期)——防火墙管理(Firewalld)——zone、服务端口、富规则与端口转发
linux·运维·笔记·安全·centos·防火墙
老白干16 分钟前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
腾飞开源17 分钟前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
疯狂打码的少年1 小时前
【面向对象】UML结构图:类图(类的关系:依赖/关联/聚合/组合/泛化/实现)
笔记
aaaameliaaa6 小时前
字符函数和字符串函数
c语言·笔记·算法
圆山猫7 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
微学AI7 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管7 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨7 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
tq10868 小时前
开放与封闭:类型系统的安全哲学
笔记