认识Java中集合框架

目录

如图,集合框架可以分为Collection,Map两大主线

第一条主线Collection由List,Queue,Set组成

第二条主线Map

队列和栈

认识队列和栈

[Iterable 接口](#Iterable 接口)

集合框架的常用工具类


本文旨在帮助读者初步了解Java集合框架的基本概念和整体结构

如图,集合框架可以分为Collection,Map两大主线


第一条主线Collection由List,Queue,Set组成

  • List代表了有序,可重复的集合,典型的实现类有基于链表实现的LinkedList,基于动态数组的ArrayList;
  • Set代表了无序,不可重复的集合,典型的实现类有HashMap,TreeMap;
  • Queue代表了队列,典型的实现类有双端队列Deque,优先级队列PriorityQueue。

第二条主线Map

Map代表键值对(Key,Value)的集合,键值对为一个值映射另一个值的结构(Key映射Value),典型实现类为HashMap。

Map 接口的实现类包括 HashMap、LinkedHashMap、TreeMap 等。

  • HashMap特点为无序,删查改速度快,适合用于不关心排序的场景
java 复制代码
Map<String, Integer> map = new HashMap<>();
map.put("C", 3);
map.put("A", 1);
map.put("B", 2);
// 输出顺序:不确定(可能是 A B C,也可能乱序)
  • LinkedeList是在HashMap的基础上增添了一个双向链表,以此来保持了键值对的插入顺序。
java 复制代码
Map<String, Integer> map = new LinkedHashMap<>();
map.put("C", 3);
map.put("A", 1);
map.put("B", 2);
// 输出顺序:C → A → B(和插入完全一样)
  • TreeMap的底层是红黑树,键值对自动按Key升序排序,速度最慢
java 复制代码
Map<String, Integer> map = new TreeMap<>();
map.put("C", 3);
map.put("A", 1);
map.put("B", 2);
// 输出顺序:A → B → C(自动排好序)

队列和栈

认识队列和栈

**队列(Queue)**是一种先进先出的数据结构,第一个加入队列的数据也是第一个被移除的元素。常用于需要按顺序处理任务的场景,如消息队列,任务调度等。

**优先级队列(PriorityQueue)**是一个无界队列,排列顺序默认升序(最小堆,最小的先出)或者安装比较器Comparator进行排序

双端队列(ArrayDeque) 是一个基于数组的,可以在两端插入和删除元素的队列。

LinkedList实现了Queue的子接口Dequeue,所以也可以当做双端队列来使用。

**栈(Stack)**是一种先进后出的数据结构,第一个加入栈的数据会成为最后一个被移除的的元素。常用于需要回溯的场景,如函数调用栈,浏览器历史记录等。


Iterable 接口

Iterable 接口是决定了这个类是否能够被遍历,如果能够遍历,就实现这个接口。而Collection则实现了这个接口,意味者所有Collection集合类都是能够被遍历的

Iterable的源码

java 复制代码
public interface Iterable<T> {
    Iterator<T> iterator();  // 核心:返回一个迭代器
}

集合框架的常用工具类

Collections:主要提供了对集合进行二分查找,排序,同步的静态方法。

java 复制代码
// 1. 排序(只对List有效)
Collections.sort(list);

// 2. 反转集合
Collections.reverse(list);

// 3. 二分查找(必须先排序)
Collections.binarySearch(list, key);

// 4. 找最大/最小值
Collections.max(list);
Collections.min(list);

// 5. 填充所有元素为同一个值
Collections.fill(list, 666);

Arrays:主要提供了对数组进行排序,打印,Lisit转换的静态方法。

java 复制代码
int[] arr = {3,1,2};

// 1. 排序
Arrays.sort(arr);

// 2. 打印数组(直接打印数组会是地址,用这个才对)
System.out.println(Arrays.toString(arr));

// 3. 数组 转 List
List<int[]> list = Arrays.asList(arr);

// 4. 二分查找
Arrays.binarySearch(arr, 2);

// 5. 复制数组
int[] newArr = Arrays.copyOf(arr, 5);

// 6. 填充数组
Arrays.fill(arr, 10);
相关推荐
星核0penstarry2 分钟前
DeepSeek-V4-Flash 正式公测:大模型行业进入「极速平价普惠时代」
java·开发语言·人工智能
老洋葱Mr_Onion3 分钟前
【C++】高精度模板
开发语言·c++·算法
脚踏实地皮皮晨29 分钟前
003003002_WPF Grid 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio
xieliyu.30 分钟前
Java 线程池入门详解:线程池基础定义 + ThreadPoolExecutor 全参构造方法逐参数解析
java·开发语言·idea·javaee
一条泥憨鱼32 分钟前
【从0开始学习计算机网络】| HTTP方法疑点解析
开发语言·计算机网络·http
神龙天舞20012 小时前
CMake构建学习笔记-通用的CMake构建脚本
笔记·学习
AOwhisky2 小时前
Linux(CentOS)系统管理入门笔记(第二十一期)——防火墙管理(Firewalld)——zone、服务端口、富规则与端口转发
linux·运维·笔记·安全·centos·防火墙
老白干3 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
腾飞开源3 小时前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
疯狂打码的少年4 小时前
【面向对象】UML结构图:类图(类的关系:依赖/关联/聚合/组合/泛化/实现)
笔记