本文目录导读:

- 榜单&投票(List + 排序)
- 日活用户去重(Set)
- 热点词频统计(HashMap + 遍历)
- 双端队列(Deque)实现回文检查
- 优先级队列(PriorityQueue)实现任务调度
- Stream API 结合集合操作(现代写法)
Java集合框架是日常开发中最常用的工具之一,掌握它的核心用法(如List、Set、Map及其常用实现类)非常重要,下面提供几个典型的Java案例,涵盖增删改查、遍历、排序、去重、线程安全等常见场景。
榜单&投票(List + 排序)
场景:实现一个简单的投票统计,按票数从高到低排序,取前3名。
import java.util.*;
public class VoteRanking {
public static void main(String[] args) {
// 模拟投票数据:候选人 -> 票数
Map<String, Integer> voteMap = new HashMap<>();
voteMap.put("张三", 120);
voteMap.put("李四", 350);
voteMap.put("王五", 98);
voteMap.put("赵六", 210);
voteMap.put("孙七", 450);
// 将Map的Entry放入List,按value(票数)降序排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(voteMap.entrySet());
list.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue()));
// 输出前三名
System.out.println("=== 投票排名 TOP3 ===");
for (int i = 0; i < Math.min(3, list.size()); i++) {
Map.Entry<String, Integer> entry = list.get(i);
System.out.println("第" + (i + 1) + "名:" + entry.getKey() + "(" + entry.getValue() + "票)");
}
}
}
知识点:
HashMap:存储键值对(无序)ArrayList:将Map.Entry转为List,方便排序sort()+ Lambda:自定义排序规则
日活用户去重(Set)
场景:统计当天活跃的用户ID,去除重复登录的用户。
import java.util.*;
public class DailyActiveUsers {
public static void main(String[] args) {
// 模拟某天所有用户的登录记录(可能含重复)
List<String> loginRecords = Arrays.asList(
"user001", "user002", "user003",
"user001", "user004", "user002", "user005"
);
// 使用HashSet自动去重
Set<String> activeUsers = new HashSet<>(loginRecords);
System.out.println("全部登录记录:\n" + loginRecords);
System.out.println("\n去重后的活跃用户(共计" + activeUsers.size() + "人):");
// 使用增强for循环遍历Set
for (String user : activeUsers) {
System.out.println(" - " + user);
}
// 验证是否包含某个用户
System.out.println("\nuser001是否活跃:" + activeUsers.contains("user001"));
}
}
知识点:
HashSet:无序、唯一、适合去重Set.contains():快速查找
热点词频统计(HashMap + 遍历)
场景:统计文章里每个单词出现的次数,并按频率降序输出。
import java.util.*;
public class WordCount {
public static void main(String[] args) {
String text = "apple banana apple orange banana apple grape";
String[] words = text.split(" ");
Map<String, Integer> freqMap = new HashMap<>();
for (String word : words) {
// getOrDefault避免空指针,简洁优雅
freqMap.put(word, freqMap.getOrDefault(word, 0) + 1);
}
// 按词频降序排序输出
List<Map.Entry<String, Integer>> list = new ArrayList<>(freqMap.entrySet());
list.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue()));
System.out.println("=== 词频统计(降序)===");
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
知识点:
HashMap:计数神器getOrDefault:避免手动判空- Entry排序输出
双端队列(Deque)实现回文检查
场景:判断一个字符串是否是回文(正反读相同),利用双端队列高效实现。
import java.util.*;
public class PalindromeCheck {
public static boolean isPalindrome(String s) {
// 转小写并去除非字母数字字符
String cleaned = s.toLowerCase().replaceAll("[^a-z0-9]", "");
// 双端队列: ArrayDeque
Deque<Character> deque = new ArrayDeque<>();
for (char c : cleaned.toCharArray()) {
deque.addLast(c);
}
// 两端同时取出比较
while (deque.size() > 1) {
if (!deque.removeFirst().equals(deque.removeLast())) {
return false;
}
}
return true;
}
public static void main(String[] args) {
String test1 = "A man, a plan, a canal: Panama";
String test2 = "race a car";
System.out.println("\"" + test1 + "\" 是否为回文? " + isPalindrome(test1));
System.out.println("\"" + test2 + "\" 是否为回文? " + isPalindrome(test2));
}
}
知识点:
Deque(双端队列)vsLinkedList:ArrayDeque性能更好,适合栈/队列场景removeFirst()/removeLast():从两端操作
优先级队列(PriorityQueue)实现任务调度
场景:模拟一个简单的任务调度系统,按紧急程度(优先级)取出任务执行。
import java.util.*;
class Task {
String name;
int priority; // 数字越小越紧急
Task(String name, int priority) {
this.name = name;
this.priority = priority;
}
@Override
public String toString() {
return name + "(优先级" + priority + ")";
}
}
public class TaskScheduler {
public static void main(String[] args) {
// 小顶堆:优先级数字越小越靠前
PriorityQueue<Task> queue = new PriorityQueue<>(
(t1, t2) -> Integer.compare(t1.priority, t2.priority)
);
// 插入任务
queue.offer(new Task("系统更新", 5));
queue.offer(new Task("安全补丁", 1));
queue.offer(new Task("用户反馈处理", 3));
queue.offer(new Task("日志清理", 10));
System.out.println("=== 任务执行顺序(按优先级)===");
while (!queue.isEmpty()) {
System.out.println("执行中:" + queue.poll());
}
}
}
知识点:
PriorityQueue:天然堆结构,适合优先级队列- 自定义比较器决定“紧急”顺序
Stream API 结合集合操作(现代写法)
场景:筛选出所有分数高于90的学生,并按分数降序取前3名。
import java.util.*;
import java.util.stream.Collectors;
class Student {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
public String toString() {
return name + ":" + score;
}
}
public class StreamExample {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("小明", 92),
new Student("小红", 88),
new Student("小刚", 95),
new Student("小美", 78),
new Student("小强", 91)
);
// 链式操作:筛选 -> 排序 -> 取前3 -> 收集成List
List<Student> top3 = students.stream()
.filter(s -> s.score > 90)
.sorted((a, b) -> b.score - a.score) // 降序
.limit(3)
.collect(Collectors.toList());
System.out.println("分数 > 90 的前三名:");
top3.forEach(System.out::println);
// 也可以直接输出姓名列表
List<String> names = top3.stream()
.map(s -> s.name)
.collect(Collectors.toList());
System.out.println("姓名列表:" + names);
}
}
知识点:
- Stream API:filter、sorted、limit、collect
- map 提取属性、forEach 遍历
- 函数式编程风格简化集合处理
| 案例 | 核心集合 | 主要用途 |
|---|---|---|
| 投票排名 | List + Map | 排序、Entry操作 |
| 日活去重 | Set | 唯一性、去重 |
| 词频统计 | HashMap | 计数、排序输出 |
| 回文检查 | Deque | 双端队列、对称判断 |
| 任务调度 | PriorityQueue | 优先级、堆排序 |
| Stream筛选 | List + Stream | 现代链式操作、筛选聚合 |
这些案例涵盖了日常开发中最常用的集合操作,建议在实际编码时多动手敲一遍,对理解集合框架的“增删改查+排序+去重+遍历”会很有帮助。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播