Java语言的数据结构

devtools/2025/1/18 9:03:39/

Java 提供了多种内置的数据结构,这些数据结构可以分为两大类:基本的数组(Array)和集合框架(Collections Framework)。集合框架又细分为多个接口和实现类,提供了丰富的功能来管理对象集合。以下是 Java 中常见数据结构的详细介绍:

1. 数组(Array)

  • 一维数组:最简单的数据结构,用于存储固定大小的同类型元素。
  • 多维数组:如二维数组、三维数组等,它们本质上是一维数组的嵌套。
java">// 一维数组
int[] numbers = {1, 2, 3, 4, 5};// 二维数组
int[][] matrix = {{1, 2, 3},{4, 5, 6}
};

数组的大小在创建时确定,之后不能改变。如果需要动态调整大小,可以考虑使用 ArrayList 或其他集合类。

2. 集合框架(Collections Framework)

2.1 List 接口

List 是一个有序集合,允许重复元素,并且可以通过索引访问元素。常见的实现类包括:

  • ArrayList:基于数组实现,支持快速随机访问,但在中间插入或删除元素效率较低。
  • LinkedList:基于双向链表实现,适合频繁的插入和删除操作,但随机访问效率低。
  • Vector:类似于 ArrayList,但它是线程安全的,性能相对较差。
  • Stack:继承自 Vector,实现了栈(后进先出)的行为。
java">List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
2.2 Set 接口

Set 是一个不允许重复元素的集合。常见的实现类包括:

  • HashSet:基于哈希表实现,提供快速查找、添加和删除操作。
  • LinkedHashSet:保持插入顺序的 HashSet。
  • TreeSet:基于红黑树实现,自然排序或根据提供的 Comparator 排序。
java">Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
2.3 Queue 接口

Queue 是一个先进先出(FIFO)的数据结构,也支持优先级队列。常见的实现类包括:

  • LinkedList:除了作为 List 的实现外,也可以作为 Queue 使用。
  • PriorityQueue:基于堆实现,可以根据元素的自然顺序或指定的 Comparator 进行排序。
java">Queue<String> queue = new LinkedList<>();
queue.offer("Apple");
String element = queue.poll(); // 移除并返回队首元素
2.4 Deque 接口

Deque(双端队列)允许从两端进行插入和移除操作。常见的实现类包括:

  • ArrayDeque:基于数组实现的双端队列。
  • LinkedList:同样可以作为 Deque 使用。
java">Deque<String> deque = new ArrayDeque<>();
deque.offerFirst("Apple");
deque.offerLast("Banana");
2.5 Map 接口

Map 存储键值对,每个键对应一个值,键是唯一的。常见的实现类包括:

  • HashMap:基于哈希表实现,提供快速的查找、添加和删除操作。
  • LinkedHashMap:保持插入顺序的 HashMap。
  • TreeMap:基于红黑树实现,按键的自然顺序或指定的 Comparator 排序。
  • Hashtable:类似于 HashMap,但它是线程安全的,性能相对较差。
  • EnumMap:专门用于枚举类型的键。
java">Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
Integer count = map.get("Apple");

3. 其他数据结构

3.1 Stack 接口(已废弃)

虽然 Java 提供了 Stack 类,但它已经被认为过时,推荐使用 Deque 接口及其实现类来代替。

3.2 BitSet

BitSet 是一个位向量,每个位代表一个布尔值(true 或 false)。适用于需要高效处理大量布尔标志的情况。

java">BitSet bitSet = new BitSet();
bitSet.set(0); // 设置第0位为true
boolean isSet = bitSet.get(0); // 获取第0位的值
3.3 PriorityQueue

PriorityQueue 是一个优先级队列,它确保每次取出的都是队列中最小(或最大)的元素。适用于需要按优先级处理任务的场景。

java">PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(10);
pq.offer(5);
pq.offer(7);
Integer min = pq.poll(); // 取出最小元素

性能特点与选择建议

  • ArrayList vs LinkedList:如果你经常需要随机访问元素,选择 ArrayList;如果你频繁地在列表中间插入或删除元素,选择 LinkedList。
  • HashSet vs TreeSet:如果你不需要排序,选择 HashSet;如果你需要自然排序或自定义排序,选择 TreeSet。
  • HashMap vs TreeMap:如果你不需要按键排序,选择 HashMap;如果你需要按键排序,选择 TreeMap。
  • Thread Safety:如果你的应用是多线程的,并且需要保证线程安全,可以选择 Vector、Hashtable 或者使用 Collections.synchronizedXXX 方法包装非线程安全的集合类。对于更复杂的并发需求,可以考虑使用并发包(java.util.concurrent)中的类,如 ConcurrentHashMap 和 CopyOnWriteArrayList。

总结

Java 的数据结构丰富多样,每种结构都有其适用的场景。选择合适的数据结构不仅可以提高代码的可读性和维护性,还能显著提升程序的性能。理解不同数据结构的特点和差异,有助于编写更高效的 Java 程序。


http://www.ppmy.cn/devtools/151522.html

相关文章

MyBatis执行一条sql语句的流程(源码解析)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MyBatis执行一条sql语句的流程&#xff08;源码解析&#xff09; MyBatis执行sql语句的流程加载配置文件加载配置文件的流程 创建sqlsessionFactory对象解析Mapper创建sqlses…

Jmeter如何进行多服务器远程测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 JMeter是Apache软件基金会的开源项目&#xff0c;主要来做功能和性能测试&#xff0c;用Java编写。 我们一般都会用JMeter在本地进行测试&#xff0c;但是受到单…

【华为OD-E卷 - 数组连续和 100分(python、java、c++、js、c)】

【华为OD-E卷 - 数组连续和 100分&#xff08;python、java、c、js、c&#xff09;】 题目 给定一个含有N个正整数的数组, 求出有多少个连续区间&#xff08;包括单个正整数&#xff09;, 它们的和大于等于x 输入描述 第一行两个整数N x&#xff08;0 < N < 100000, …

ASP.NET Core - 依赖注入(四)

ASP.NET Core - 依赖注入&#xff08;四&#xff09; 4. ASP.NET Core默认服务5. 依赖注入配置变形 4. ASP.NET Core默认服务 之前讲了中间件&#xff0c;实际上一个中间件要正常进行工作&#xff0c;通常需要许多的服务配合进行&#xff0c;而中间件中的服务自然也是通过 Ioc…

某国际大型超市电商销售数据分析和可视化

完整源码项目包获取→点击文章末尾名片&#xff01; 本作品将从人、货、场三个维度&#xff0c;即客户维度、产品维度、区域维度&#xff08;补充时间维度与其他维度&#xff09;对某国际大型超市的销售情况进行数据分析和可视化报告展示&#xff0c;从而为该超市在弄清用户消费…

【蓝桥杯选拔赛真题63】C++奇数 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

目录 C++奇数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 七、推荐资料 C++奇数 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 给定两个正整数N和M(10≤N<M≤10000),请找出N到M…

minio https配置

minio启动时候指定数据目录,配置文件&#xff0c;密钥文件目录&#xff0c;环境文件 1.创建minio用户,专门用于服务启动的 groupadd -r minio-user useradd -M -r -g minio-user minio-user 2.在当前用户目录下创建minio目录&#xff0c;存储minio相关文件 mkdir minio 在mini…

微软震撼发布:Phi-4语言模型登陆Hugging Face

近日&#xff0c;微软公司在Hugging Face平台上正式发布了其最新的语言模型Phi-4&#xff0c;这一发布标志着人工智能技术的又一重要进步。Phi-4模型以其140亿参数的高效配置&#xff0c;在复杂推理任务中表现出色&#xff0c;特别是在数学领域&#xff0c;更是展现出了卓越的能…