新闻详情

新闻详情

首页 / 资讯中心 / 详情

Java 常用数据结构完整教程

发布时间:2026/11/3 17:15:30来源:尧图网络
Java 常用数据结构完整教程
一、线性结构1. 数组 Array特点固定长度、连续内存、查询快、增删慢分一维数组、二维数组。示例代码java运行public class ArrayDemo { public static void main(String[] args) { // 1. 一维数组定义 int[] arr {10, 20, 30, 40}; // 根据下标取值 System.out.println(arr[1]); // 20 // 遍历数组 for (int num : arr) { System.out.print(num ); } // 2. 二维数组矩阵 int[][] matrix {{1,2},{3,4}}; System.out.println(\n matrix[0][1]); // 2 } }核心解释长度初始化后不可修改随机访问时间复杂度O(1)中间插入 / 删除需要移动元素O(n)适合长度固定、频繁查询场景。2. ArrayList 动态数组List 实现特点底层数组封装自动扩容有序可重复查询快、中间增删慢。示例代码java运行import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { // 创建集合 ArrayListString list new ArrayList(); // 添加元素 list.add(Java); list.add(MySQL); list.add(Redis); // 指定下标插入 list.add(1, Spring); // 获取元素 System.out.println(list.get(1)); // Spring // 删除元素 list.remove(MySQL); // 遍历 for (String s : list) { System.out.print(s ); } // 获取长度 System.out.println(\n长度 list.size()); } }核心解释默认容量 10扩容规则原容量*1.5允许null、元素可重复、有序尾部增删效率高中间操作大量移位。3. LinkedList 双向链表List/Deque特点底层双向链表无扩容头尾增删极快随机查询慢。示例代码java运行import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedListInteger link new LinkedList(); // 尾部添加 link.add(1); // 头部添加 link.addFirst(0); // 尾部添加 link.addLast(2); System.out.println(link.getFirst()); // 0 System.out.println(link.getLast()); // 2 link.removeFirst(); // 删除头节点 System.out.println(link); // [1, 2] } }核心解释每个节点存prev、value、next头尾增删O(1)按索引查找O(n)同时实现队列、双端队列接口可做栈 / 队列。4. Stack 栈后进先出 LIFO特点先进后出Java 推荐用Deque代替老旧 Stack 类。示例代码java运行import java.util.Deque; import java.util.LinkedList; public class StackDemo { public static void main(String[] args) { DequeString stack new LinkedList(); // 入栈 stack.push(A); stack.push(B); stack.push(C); System.out.println(stack.peek()); // 取栈顶不删除 C System.out.println(stack.pop()); // 出栈 C System.out.println(stack); // [B, A] } }核心解释push 入栈、pop 出栈、peek 查看栈顶适用场景表达式求值、括号匹配、函数调用栈。5. Queue 队列先进先出 FIFO普通队列 LinkedListjava运行import java.util.LinkedList; import java.util.Queue; public class QueueDemo { public static void main(String[] args) { QueueInteger queue new LinkedList(); queue.offer(1); // 入队 queue.offer(2); queue.offer(3); System.out.println(queue.peek()); // 队首 1 System.out.println(queue.poll()); // 出队 1 System.out.println(queue); // [2, 3] } }优先级队列 PriorityQueue自动元素排序默认小顶堆java运行import java.util.PriorityQueue; import java.util.Queue; public class PriorityQueueDemo { public static void main(String[] args) { QueueInteger pq new PriorityQueue(); pq.add(5); pq.add(2); pq.add(8); // 自动从小到大出队 while (!pq.isEmpty()) { System.out.print(pq.poll() ); // 2 5 8 } } }解释Queueoffer 入队、poll 出队、peek 队首PriorityQueue底层二叉堆自定义对象需重写比较器。二、哈希结构无序、去重、键值映射1. HashSet 哈希集合元素唯一无序底层 HashMap只存 keyjava运行import java.util.HashSet; import java.util.Set; public class HashSetDemo { public static void main(String[] args) { SetString set new HashSet(); set.add(苹果); set.add(香蕉); set.add(苹果); // 重复元素自动丢弃 System.out.println(set); // [苹果, 香蕉] System.out.println(set.contains(香蕉)); // true set.remove(香蕉); } }解释元素不可重复无序增删查平均O(1)自定义对象必须重写equals()hashCode()。2. TreeSet 有序集合红黑树自动升序去重java运行import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] args) { TreeSetInteger treeSet new TreeSet(); treeSet.add(9); treeSet.add(3); treeSet.add(6); System.out.println(treeSet); // [3, 6, 9] 自动排序 } }解释底层红黑树查找、插入删除O(logn)元素必须实现 Comparable。3. HashMap 键值对哈希表最常用java运行import java.util.HashMap; import java.util.Map; public class HashMapDemo { public static void main(String[] args) { MapString, Integer map new HashMap(); // 存键值 map.put(张三, 20); map.put(李四, 22); map.put(张三, 21); // 覆盖旧值 System.out.println(map.get(张三)); // 21 // 判断key是否存在 System.out.println(map.containsKey(李四)); // 遍历键值对 for (Map.EntryString, Integer entry : map.entrySet()) { System.out.println(entry.getKey() entry.getValue()); } } }核心解释JDK1.8 底层数组 链表 红黑树key 唯一value 可重复允许一个 null key、多个 null value负载因子 0.75达到阈值自动扩容 2 倍平均读写O(1)。4. TreeMap 有序 Map红黑树key 自动排序java运行import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { TreeMapString, Integer treeMap new TreeMap(); treeMap.put(b, 2); treeMap.put(a, 1); System.out.println(treeMap); // {a1, b2} } }5. LinkedHashMap / LinkedHashSet保留插入顺序java运行LinkedHashMapString, Integer linkMap new LinkedHashMap(); linkMap.put(1,1); linkMap.put(2,2); System.out.println(linkMap); // 按插入顺序输出三、树结构1. 二叉树自定义实现java运行// 树节点 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val val; } } public class BinaryTreeDemo { // 中序遍历左-根-右 public static void inOrder(TreeNode root) { if (root null) return; inOrder(root.left); System.out.print(root.val ); inOrder(root.right); } public static void main(String[] args) { // 构建二叉树 TreeNode root new TreeNode(1); root.left new TreeNode(2); root.right new TreeNode(3); inOrder(root); // 2 1 3 } }解释二叉树每个节点最多两个子节点遍历分为前序、中序、后序、层序。2. 二叉搜索树 BST左子树 根 右子树中序遍历有序TreeSet/TreeMap 底层。四、并发安全集合多线程专用1. ConcurrentHashMap线程安全 Mapjava运行import java.util.concurrent.ConcurrentHashMap; public class ConcurrentMapDemo { public static void main(String[] args) { ConcurrentHashMapString, Integer map new ConcurrentHashMap(); map.put(a, 1); map.get(a); } }解释分段锁 / CAS高并发性能远优于Hashtable。2. CopyOnWriteArrayList 线程安全 List写时复制读不加锁适合读多写少场景。java运行import java.util.concurrent.CopyOnWriteArrayList; CopyOnWriteArrayListString list new CopyOnWriteArrayList(); list.add(test);
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/3 7:07:39

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/3 12:09:38

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/3 12:09:41

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉