java - 将数据存储在有效的数据结构中,以便快速搜索

标签 java data-structures

在一次采访中有人问我给你两个对象,学生和类(class),它们之间存在多对多关系。一个学生可以注册多门类(class),也可以有很多学生注册一门类(class)。设计一个有效的数据结构来存储这些数据,记住搜索的时间复杂度应该是最佳的。搜索可以针对单个类(class)注册的学生列表,也可以搜索单个学生注册的类(class)列表。

我已经回答说我们可以使用两个 HashMap,一个用于 StudentName -> Course List Lookup,另一个用于 Course Name -> Student List Lookup。对于这两种情况,搜索都将在 O(1) 中进行。

缺点:你会使用大量内存,如果学生的类(class)发生变化,你需要做簿记(你必须更新类(class)名称映射中的条目)。但这不是问题,我猜搜索不可能比 O(1) 更好。

你能告诉我最好的数据结构是什么吗

最佳答案

如果您不需要范围查找(例如,“返回姓名以“B”开头的学生访问过的所有类(class)),前提是数据结构是理想的。唯一可以改进的是替换List by HashSet 为了使更新/删除操作也在保证的 O(1) 内进行。

Map<Student, Set<Course>> studentsToCources;  // HashMap, HashSet
Map<Course, Set<Student>> coursesToStudents;  // HashMap, HashSet

当然,这些映射必须封装在某个类中,该类的职责是对调用者透明地对两个映射执行操作。

关于java - 将数据存储在有效的数据结构中,以便快速搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30138347/

相关文章:

用于高效添加、删除和随机选择的 Python 数据结构

algorithm - 将不等式合并为一个

c# - 什么是 C++ std::pair 的 C# 模拟?

java - 我如何将这个 forEach 转换为 for 循环

java - 递归问题?

java - 如何将 Firestore 中的时间戳添加到我的变量中

反转链表的代码

java - 如何为 .java 文件中的非公共(public)类生成 javadoc

java - 将参数化类型实例引用到其原始类型与使用原始类型引用另一个原始类型实例之间的区别?

arrays - 结构体数组或元胞数组