Java 集合在实际业务系统中的建模应用:如何选择合适的集合类?
开篇语
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
在实际的业务系统中,数据结构的选择往往会直接影响到系统的性能和可维护性。Java 提供了丰富的集合类,它们为不同的数据组织和操作提供了多种选择。例如,列表、集合、映射、队列和堆栈等数据结构都可以用来满足不同的业务需求。在设计和开发业务系统时,理解如何根据业务场景选择合适的集合类,对于提升系统的性能和可扩展性至关重要。
本文将通过一些常见的业务场景,介绍 Java 集合类的建模应用,并为每种场景选择合适的集合类。
1. 订单管理系统:使用 HashMap
存储订单信息
在订单管理系统中,订单通常是通过唯一的订单 ID 来访问和修改的。为此,我们可以选择使用 HashMap
来存储订单信息,其中订单 ID 是键,订单对象是值。
示例:
import java.util.HashMap;
import java.util.Map;
public class OrderManagementSystem {
private Map<String, Order> orders;
public OrderManagementSystem() {
orders = new HashMap<>();
}
// 添加订单
public void addOrder(String orderId, Order order) {
orders.put(orderId, order);
}
// 根据订单ID获取订单
public Order getOrder(String orderId) {
return orders.get(orderId);
}
// 根据订单ID删除订单
public void removeOrder(String orderId) {
orders.remove(orderId);
}
// 获取所有订单数量
public int getOrderCount() {
return orders.size();
}
public static void main(String[] args) {
OrderManagementSystem oms = new OrderManagementSystem();
oms.addOrder("O1001", new Order("O1001", "Product1", 2));
oms.addOrder("O1002", new Order("O1002", "Product2", 1));
System.out.println("Order O1001: " + oms.getOrder("O1001"));
System.out.println("Total orders: " + oms.getOrderCount());
}
}
class Order {
String orderId;
String product;
int quantity;
public Order(String orderId, String product, int quantity) {
this.orderId = orderId;
this.product = product;
this.quantity = quantity;
}
@Override
public String toString() {
return "Order{" + "orderId='" + orderId + '\'' + ", product='" + product + '\'' + ", quantity=" + quantity + '}';
}
}
设计分析:
HashMap
是基于哈希表实现的,它提供了 O(1) 的时间复杂度用于查找、插入和删除元素,这使得通过订单 ID 进行快速访问成为可能。- 在这个场景中,我们使用订单 ID 作为 key,这样就能实现高效的订单查找和管理。
适用场景:
- 需要通过唯一键(例如订单 ID)进行快速查找、更新和删除的场景。
2. 用户角色权限管理:使用 HashSet
存储权限集合
在权限管理系统中,每个用户会有一组权限,这些权限通常是唯一且无序的。因此,使用 HashSet
来存储用户的权限集合是一个合适的选择。
示例:
import java.util.HashSet;
import java.util.Set;
public class UserRoleManagement {
private Set<String> permissions;
public UserRoleManagement() {
permissions = new HashSet<>();
}
// 添加权限
public void addPermission(String permission) {
permissions.add(permission);
}
// 移除权限
public void removePermission(String permission) {
permissions.remove(permission);
}
// 检查是否有权限
public boolean hasPermission(String permission) {
return permissions.contains(permission);
}
public static void main(String[] args) {
UserRoleManagement urm = new UserRoleManagement();
urm.addPermission("READ");
urm.addPermission("WRITE");
urm.addPermission("DELETE");
System.out.println("Has WRITE permission: " + urm.hasPermission("WRITE"));
urm.removePermission("WRITE");
System.out.println("Has WRITE permission: " + urm.hasPermission("WRITE"));
}
}
设计分析:
HashSet
是一个无序且不允许重复元素的集合。在这个场景中,我们使用HashSet
来存储权限集合,能够有效避免重复的权限,并提供高效的查找操作。- 由于权限是无序的,
HashSet
的特性正符合我们的需求。
适用场景:
- 存储无序且唯一的元素集合,避免重复数据,常用于权限、标签等管理系统。
3. 任务调度系统:使用 PriorityQueue
执行优先级任务
在任务调度系统中,任务通常有不同的优先级。我们可以使用 PriorityQueue
来实现基于优先级的任务调度。PriorityQueue
是一个基于堆的数据结构,提供了优先级队列功能。
示例:
import java.util.PriorityQueue;
public class TaskScheduler {
static class Task implements Comparable<Task> {
String taskName;
int priority; // 1: High, 2: Medium, 3: Low
public Task(String taskName, int priority) {
this.taskName = taskName;
this.priority = priority;
}
@Override
public int compareTo(Task other) {
return Integer.compare(this.priority, other.priority);
}
@Override
public String toString() {
return "Task{" + "taskName='" + taskName + '\'' + ", priority=" + priority + '}';
}
}
public static void main(String[] args) {
PriorityQueue<Task> taskQueue = new PriorityQueue<>();
taskQueue.add(new Task("Task1", 3)); // Low priority
taskQueue.add(new Task("Task2", 1)); // High priority
taskQueue.add(new Task("Task3", 2)); // Medium priority
// 执行任务,按优先级顺序
while (!taskQueue.isEmpty()) {
System.out.println("Executing: " + taskQueue.poll());
}
}
}
设计分析:
PriorityQueue
根据元素的优先级自动排序。在这个例子中,Task
类实现了Comparable
接口,通过compareTo
方法定义任务的优先级。- 任务队列会根据任务的优先级进行排序,
poll()
方法会返回并移除队列中优先级最高的任务。
适用场景:
- 任务调度、消息队列等需要按照优先级顺序处理的场景。
4. 社交网络:使用 HashMap
和 HashSet
存储好友关系
在社交网络中,用户和他们的好友之间有一种映射关系,我们可以使用 HashMap
来存储每个用户与其好友的集合。每个用户的 key 是用户 ID,value 是该用户的好友集合。
示例:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class SocialNetwork {
private Map<String, Set<String>> userFriends;
public SocialNetwork() {
userFriends = new HashMap<>();
}
// 添加好友
public void addFriend(String user, String friend) {
userFriends.computeIfAbsent(user, k -> new HashSet<>()).add(friend);
userFriends.computeIfAbsent(friend, k -> new HashSet<>()).add(user);
}
// 查看好友
public Set<String> getFriends(String user) {
return userFriends.getOrDefault(user, new HashSet<>());
}
public static void main(String[] args) {
SocialNetwork sn = new SocialNetwork();
sn.addFriend("Alice", "Bob");
sn.addFriend("Bob", "Charlie");
System.out.println("Alice's friends: " + sn.getFriends("Alice"));
System.out.println("Bob's friends: " + sn.getFriends("Bob"));
}
}
设计分析:
HashMap<String, Set<String>>
:HashMap
用于存储每个用户与其好友的关系,用户 ID 作为键,好友集合作为值。HashSet
用于存储每个用户的好友,确保每个好友是唯一的。
适用场景:
- 存储用户关系、社交网络、推荐系统等需要管理多对多关系的场景。
总结
Java 提供的集合类(如 HashMap
、HashSet
、PriorityQueue
等)可以帮助我们高效地实现各种业务系统中的数据管理需求。在实际开发中,选择合适的集合类是确保系统性能和可维护性的关键。通过本文的案例,我们可以总结出几个常见的使用场景:
HashMap
:适用于存储需要根据唯一键快速查找的数据(例如订单管理、用户权限管理)。HashSet
:适用于存储不允许重复的元素集合(例如权限、标签管理)。PriorityQueue
:适用于根据优先级排序执行任务的场景(例如任务调度系统)。HashMap
和HashSet
组合:适用于存储多对多关系(例如社交网络、推荐系统)。
通过合理使用这些集合类,你能够根据具体的业务需求设计高效且易于维护的数据结构。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!
- 随机文章
- 热门文章
- 热评文章
- 全面了解自我:20个心理健康测试题目心理健康测试20题目问答
- 心理健康自我评估:了解你的心理状态并采取行动孩子心理问题测试
- 揭秘人际关系的秘密:心理测试与实用策略人际关系心理测试题及答案
- 军队心理测试:了解、准备与应对策略当兵心理测试题大全
- 国际IQ测试:探索智力的奥秘与挑战国际智商测试
- 广东外语艺术职业学院普通话测试指南广东外语艺术职业学院普通话证
- 人物性格测试 测你的性格最似《彼岸花》中的谁
- 免费测你的性格和《三叉戟》中的谁最像
- 测试你性格里的冷暖色调比例是怎样的