当前位置: 首页 > news >正文

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

Java 数据结构详解

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

1. 数组 (Array)

操作示例

// 创建数组int[]numbers=newint[5];// 默认值为0String[]names={"Alice","Bob","Charlie"};// 直接初始化// 添加/修改元素numbers[0]=10;numbers[1]=20;// 遍历数组for(inti=0;i<names.length;i++){System.out.println(names[i]);}// 增强for循环遍历for(Stringname:names){System.out.println(name);}

应用场景

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

2. 列表 (List)

操作示例

// 创建ArrayListList<String>fruits=newArrayList<>();// 添加元素fruits.add("Apple");fruits.add("Banana");fruits.add(1,"Orange");// 在指定位置插入// 移除元素fruits.remove("Apple");// 按对象移除fruits.remove(0);// 按索引移除// 遍历for(Stringfruit:fruits){System.out.println(fruit);}// 创建LinkedListList<Integer>linkedList=newLinkedList<>();linkedList.add(1);linkedList.add(2);((LinkedList<Integer>)linkedList).addFirst(0);

应用场景

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

3. 集合 (Set)

操作示例

// 创建HashSetSet<String>uniqueNames=newHashSet<>();// 添加元素uniqueNames.add("John");uniqueNames.add("Jane");uniqueNames.add("John");// 重复元素不会被添加// 移除元素uniqueNames.remove("Jane");// 遍历for(Stringname:uniqueNames){System.out.println(name);}

应用场景

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

4. 映射 (Map)

操作示例

// 创建HashMapMap<String,Integer>ages=newHashMap<>();// 添加键值对ages.put("Tom",25);ages.put("Jerry",30);ages.put("Spike",35);// 移除键值对ages.remove("Jerry");// 遍历键for(Stringname: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)

操作示例

// 创建队列Queue<String>queue=newLinkedList<>();// 添加元素(入队)queue.offer("Task1");queue.offer("Task2");queue.add("Task3");// 另一种添加方式// 移除元素(出队)Stringtask=queue.poll();// 返回并移除头部元素Stringhead=queue.peek();// 仅查看头部元素不移除// 遍历while(!queue.isEmpty()){System.out.println(queue.poll());}

应用场景

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

6. 栈 (Stack)

操作示例

// 使用Deque实现栈(推荐方式)Deque<Integer>stack=newArrayDeque<>();// 入栈stack.push(10);stack.push(20);stack.push(30);// 出栈Integertop=stack.pop();// 返回并移除栈顶元素Integerpeek=stack.peek();// 仅查看栈顶元素不移除// 遍历while(!stack.isEmpty()){System.out.println(stack.pop());}

应用场景

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

性能对比总结

数据结构查找插入删除适用场景
ArrayO(1)O(n)O(n)固定大小,频繁访问
ArrayListO(1)O(1)*O(n)动态数组,尾部操作多
LinkedListO(n)O(1)O(1)频繁插入删除
HashSetO(1)O(1)O(1)快速查找,去重
HashMapO(1)O(1)O(1)键值对映射
QueueO(1)O(1)O(1)FIFO场景
StackO(1)O(1)O(1)LIFO场景

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

http://www.cnnetsun.cn/news/21488.html

相关文章:

  • 27、恶意软件分类与系统发育分析指南
  • 20、网站服务器安全防护全攻略
  • 时间过半,目标依然遥远?OKR如何让团队找回“冲刺感”
  • 【JavaSE】十一、Stack Queue Deque PriorityQueue Map Set
  • 蚌埠住了,Java面试居然卷到了JDK源码级别!
  • 别再白忙活!数电发票不能作废,红冲这些要点要注意!
  • ComfyUI-MultiGPU分布式显存优化实战指南
  • B站缓存转换神器:一键解锁本地视频播放新体验
  • 客户端连接Clickhouse连不上解决方案
  • 从“查重焦虑”到“逻辑自洽”:一个本科生如何用智能工具重建论文写作的底层信心
  • LIO-SAM Ouster 128线激光雷达实战配置指南:从入门到性能提升
  • 从“憋不出引言”到“理清逻辑链”:一位本科生如何用智能工具重构毕业论文写作路径
  • 从“焦虑选题”到“逻辑闭环”:一名本科生如何在毕业季用智能工具完成学术初体验的华丽转身
  • 【MWORKS使用技巧72】1分钟带你了解在Sysblock中如何定义函数及算法
  • 借JAVA之力,解锁旅行攻略与搭子新玩法
  • JAVA旅行系统:攻略在手,搭子同行无忧
  • 语音识别技术在教育场景的应用实践与工具选型探索
  • 三步搞定verl:RLHF训练环境快速部署手册
  • 好写作AI:复杂算法的“金牌翻译”,让你论文的引言不再“不说人话”
  • 好写作AI:当枯燥的统计表格,遇上会讲故事的AI“翻译官”
  • 重磅︱数字孪生风洞「风神NF3」发布!
  • 审计场景中录音转文字工具的技术实现与选型指南
  • Livewire完整入门指南:5分钟掌握Laravel动态界面开发
  • Origami Simulator实战指南:从零开始掌握数字折纸艺术
  • 波浪带鱼理论:过滤无效信号,提升投资收益的法宝
  • Step1X-Edit v1.2发布:推理编辑能力跃升,重新定义AI图像创作标准
  • BlenderMCP像素艺术转换终极指南:从3D模型到复古游戏资产的快速上手
  • OpenMower机器人割草机固件测试实战指南
  • 23、深入解析Kubernetes集群扩展与高级网络
  • Many Notes:打造高效云端笔记的终极解决方案