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());}应用场景
浏览器历史记录管理,实现"后退"功能,最近访问的页面最先显示。
性能对比总结
| 数据结构 | 查找 | 插入 | 删除 | 适用场景 |
|---|---|---|---|---|
| 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)