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

时间:2015-05-09 09:38:15

标签: java data-structures

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

我回复说我们可以使用两个HashMaps,一个用于StudentName - >课程列表查找和一个课程名称 - >学生列表查找。对于这两种情况,搜索将在O(1)中。

缺点:如果学生的课程发生变化(您必须更新课程名称地图中的条目),您需要使用大量内存并且需要进行簿记。但这不是问题,搜索不能比O(1)更好。

请告知您最好的数据结构

1 个答案:

答案 0 :(得分:1)

如果您不需要范围查找(例如"返回名称从" B" 开始的学生访问的所有课程),则提供的数据结构为理想。唯一可以改进的是将List替换为HashSet,以便在保证的O(1)中进行更新/删除操作。

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

当然,这些地图必须封装在某个类中,其中职责是在两个地图上对呼叫者透明地执行操作。

相关问题