【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计

欢迎来到Java集合框架系列的第一篇文章!🌹
本系列文章将以通俗易懂的语言,结合实际开发经验,带您深入理解Java集合框架的设计智慧。🌹
若文章中有任何不准确或需要改进的地方,欢迎大家指出,让我们一起在交流中进步!🌹
文章中的所有示例代码都经过实际验证,您可以直接在项目中参考使用。如果觉得有帮助,欢迎点赞转发!🌹

起篇

目录

阅读提示:

  • 如果你是初学者,建议按顺序阅读
  • 如果你是有经验的开发者,可以直接跳转到感兴趣的章节
  • 每个主题都配有代码示例和实践建议

Java集合框架基础精讲

在上一篇《Java集合框架学习指南》中,我们绘制了一张完整的知识地图。今天,让我们迈出探索的第一步,深入理解Java集合框架的设计精髓。

一、基础概念

1. 集合框架层次结构

Java集合框架主要分为两大体系:

  • Collection:存储元素的集合,就像一个容器,可以存放多个元素
  • Map:存储键值对的映射,就像一个字典,可以通过键快速找到值

Collection 体系

Collection
├── List(有序、可重复)
│   ├── ArrayList
│   ├── LinkedList
│   └── Vector
├── Set(无序、不重复)
│   ├── HashSet
│   ├── TreeSet
│   └── LinkedHashSet
└── Queue(队列)
    ├── PriorityQueue
    └── Deque
List家族

List代表有序、可重复的集合,就像我们排队一样,每个人都有明确的位置。

  1. ArrayList
// 创建和添加元素
List<String> fruits = new ArrayList<>();
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("橙子");

// 按索引访问
System.out.println(fruits.get(0));  // 输出:苹果

// 插入和删除
fruits.add(1, "葡萄");     // 在索引1处插入
fruits.remove("香蕉");     // 删除指定元素
  • 特点:查询快,增删慢
  • 场景:适合频繁查询,较少增删的场景
  • 应用:展示列表、数据缓存等
  1. LinkedList
// 创建和操作LinkedList
LinkedList<String> tasks = new LinkedList<>();
tasks.addFirst("任务1");   // 添加到开头
tasks.addLast("任务2");    // 添加到结尾
tasks.removeFirst();       // 移除第一个
tasks.removeLast();       // 移除最后一个
  • 特点:增删快,查询慢
  • 场景:适合频繁增删,较少查询的场景
  • 应用:任务队列、消息队列等
Set家族

Set代表无序、不重复的集合,就像一个集市,东西只能有一份。

  1. HashSet
// 创建和使用HashSet
Set<String> tags = new HashSet<>();
tags.add("Java");
tags.add("Python");
tags.add("Java");  // 重复元素不会被添加
System.out.println(tags);  // 输出:[Java, Python]

// 判断元素是否存在
boolean hasJava = tags.contains("Java");  // 返回true
  • 特点:查询快,无序
  • 场景:需要去重的场景
  • 应用:标签系统、去重统计等
  1. TreeSet
// 创建和使用TreeSet
TreeSet<Integer> scores = new TreeSet<>();
scores.add(85);
scores.add(92);
scores.add(78);
System.out.println(scores);  // 自动排序:[78, 85, 92]

// 范围查询
System.out.println(scores.ceiling(80));  // 大于等于80的最小值
System.out.println(scores.floor(90));    // 小于等于90的最大值
  • 特点:有序(自然顺序或自定义顺序)
  • 场景:需要排序的去重场景
  • 应用:排行榜、成绩统计等
Queue家族

Queue代表队列,就像排队买票,先来先服务。

  1. PriorityQueue
// 创建优先队列
PriorityQueue<String> taskQueue = new PriorityQueue<>((a, b) -> 
    b.length() - a.length());  // 按字符串长度降序排列
taskQueue.offer("短任务");
taskQueue.offer("非常长的任务");
taskQueue.offer("中等任务");

// 获取任务
System.out.println(taskQueue.poll());  // 输出:非常长的任务
  • 特点:自动排序的队列
  • 场景:需要按优先级处理的场景
  • 应用:任务调度、事件处理等
  1. ArrayDeque
// 作为栈使用
ArrayDeque<String> stack = new ArrayDeque<>();
stack.push("第一层");
stack.push("第二层");
System.out.println(stack.pop());  // 输出:第二层

// 作为队列使用
ArrayDeque<String> queue = new ArrayDeque<>()
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值