Java 中的数据结构详解及应用场景

Java 数据结构详解

Java 提供了丰富的内置数据结构,主要通过集合框架实现。以下详细介绍常用数据结构的操作和应用场景。

1. 数组 (Array)

操作示例

java 复制代码
// 创建数组
int[] numbers = new int[5]; // 默认值为0
String[] names = {"Alice", "Bob", "Charlie"}; // 直接初始化

// 添加/修改元素
numbers[0] = 10;
numbers[1] = 20;

// 遍历数组
for(int i = 0; i < names.length; i++) {
    System.out.println(names[i]);
}

// 增强for循环遍历
for(String name : names) {
    System.out.println(name);
}

应用场景

存储固定数量的学生考试成绩,便于快速通过索引访问特定学生的分数。

2. 列表 (List)

操作示例

java 复制代码
// 创建ArrayList
List<String> fruits = new ArrayList<>();

// 添加元素
fruits.add("Apple");
fruits.add("Banana");
fruits.add(1, "Orange"); // 在指定位置插入

// 移除元素
fruits.remove("Apple"); // 按对象移除
fruits.remove(0); // 按索引移除

// 遍历
for(String fruit : fruits) {
    System.out.println(fruit);
}

// 创建LinkedList
List<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
((LinkedList<Integer>) linkedList).addFirst(0);

应用场景

购物车商品管理,支持动态增删商品和保持添加顺序。

3. 集合 (Set)

操作示例

java 复制代码
// 创建HashSet
Set<String> uniqueNames = new HashSet<>();

// 添加元素
uniqueNames.add("John");
uniqueNames.add("Jane");
uniqueNames.add("John"); // 重复元素不会被添加

// 移除元素
uniqueNames.remove("Jane");

// 遍历
for(String name : uniqueNames) {
    System.out.println(name);
}

应用场景

记录网站独立访客IP地址,自动去重统计唯一访问用户数。

4. 映射 (Map)

操作示例

java 复制代码
// 创建HashMap
Map<String, Integer> ages = new HashMap<>();

// 添加键值对
ages.put("Tom", 25);
ages.put("Jerry", 30);
ages.put("Spike", 35);

// 移除键值对
ages.remove("Jerry");

// 遍历键
for(String name : ages.keySet()) {
    System.out.println(name + ": " + ages.get(name));
}

// 遍历键值对
for(Map.Entry<String, Integer> entry : ages.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

应用场景

缓存用户ID与用户名的对应关系,实现O(1)时间复杂度的查询。

5. 队列 (Queue)

操作示例

java 复制代码
// 创建队列
Queue<String> queue = new LinkedList<>();

// 添加元素(入队)
queue.offer("Task1");
queue.offer("Task2");
queue.add("Task3"); // 另一种添加方式

// 移除元素(出队)
String task = queue.poll(); // 返回并移除头部元素
String head = queue.peek(); // 仅查看头部元素不移除

// 遍历
while(!queue.isEmpty()) {
    System.out.println(queue.poll());
}

应用场景

打印任务调度系统,按照任务提交顺序依次处理打印请求。

6. 栈 (Stack)

操作示例

java 复制代码
// 使用Deque实现栈(推荐方式)
Deque<Integer> stack = new ArrayDeque<>();

// 入栈
stack.push(10);
stack.push(20);
stack.push(30);

// 出栈
Integer top = stack.pop(); // 返回并移除栈顶元素
Integer peek = stack.peek(); // 仅查看栈顶元素不移除

// 遍历
while(!stack.isEmpty()) {
    System.out.println(stack.pop());
}

应用场景

浏览器历史记录管理,实现"后退"功能,最近访问的页面最先显示。

性能对比总结

数据结构 查找 插入 删除 适用场景
Array O(1) O(n) O(n) 固定大小,频繁访问
ArrayList O(1) O(1)* O(n) 动态数组,尾部操作多
LinkedList O(n) O(1) O(1) 频繁插入删除
HashSet O(1) O(1) O(1) 快速查找,去重
HashMap O(1) O(1) O(1) 键值对映射
Queue O(1) O(1) O(1) FIFO场景
Stack O(1) O(1) O(1) LIFO场景

*注:ArrayList尾部插入为O(1),其他位置为O(n)

相关推荐
m0_6138562929 分钟前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
abcnull43 分钟前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
叶小鸡1 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
我的xiaodoujiao1 小时前
API 接口自动化测试详细图文教程学习系列16--项目实战演练3
python·学习·测试工具·pytest
juniperhan1 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054731 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路2 小时前
C++23概述
java·c++·c++23
时空系2 小时前
第10篇:继承扩展——面向对象编程进阶 python中文编程
开发语言·python·ai编程
专注API从业者3 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库