gpt4 book ai didi

java - 多个不同的 map 可以共享相同的键集吗?

转载 作者:行者123 更新时间:2023-12-02 10:38:56 27 4
gpt4 key购买 nike

我特别使用 Java,但即使这在 Java 中不可能,我也有兴趣知道这在任何语言中是否可能。

我在学生类中有一组考试对象,代表学生参加的考试,对于该组中的每个考试,我想跟踪学生对考试问题的回答,并且我想跟踪学生每次考试的成绩。

实现此目的的最直接方法是为每个关系简单地设置两个映射。但是,我希望能够保证映射中存在的任何键都存在于所有映射中,并且从任何映射中删除键应该将其从所有映射中删除。当每个 map 的键实际上都代表同一事物时,拥有一个通用键集似乎会更有效:学生参加的考试集。

那么是否可以使多个不同的 map 依赖于相同的键集?不管这是否可能,有什么理由说它是一个坏主意吗?

谢谢!我很感激任何建议:)

编辑:根据记录,我虽然只是实例化一个新 map ,然后迭代原始 map 的键集,将每个键添加到新 map 中,但我认为这不会达到我想要的效果。我将创建一个新的键集,它恰好包含原始键集的所有引用。我的两张 map 实际上并不依赖于相同的键集,因此更改一张 map 不会影响另一张 map 。

最佳答案

在 Java(和大多数语言)中,键集在 Map 内部紧密耦合。实现,因为它会影响查找键以查找其值的方式。一Map可以使用HashSet实现将值对象与键关联,并处理哈希冲突,而另一个 Map可以使用TreeSet 。您可以创建自己的 Map实现,但我怀疑它只是错误的模型。

你为什么不稍微改变一下方法呢?你说你本质上有一组 key ,Student s,以及多个值,Exam的集合学生拿走了,以及 Grade 的集合每个Exam s 。

如果您创建一个名为 StudentExams 的新类又怎么样?其中您有 Map<Exam, Grade> .

public class StudentExams {
private Map<Exam, Grade> examGrades = ... //choose whatever you want

//... constructor and setter methods here if you need them

public Set<Exam> getExams() {
return examGrades.keySet();
}

/**
* Returns the Grade for the exam the student took,
* or Optional.empty() if the student did not take that exam.
*/
public Optional<Grade> getGrade(Exam exam) {
return Optional.ofNullable(examGrades.get(exam));
}
}

然后在你的主Map中你有一个Map<Student, StudentExams>

通过这种方式,您可以为每个学生获取他的 StudentExams并提取 Exam 的集合对象及其Grade对象。

关于java - 多个不同的 map 可以共享相同的键集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com