Java中HashMap中HashMap的值
我有一个学生的hashmap,其中存储了id、姓名和姓氏。 所以我创造了这个:Java中HashMap中HashMap的值,java,object,hashmap,Java,Object,Hashmap,我有一个学生的hashmap,其中存储了id、姓名和姓氏。 所以我创造了这个: Map<Interger, HashMap<String,String>> students = new HashMap<>(); 其中第二个hashmap存储名称和lastname。 我的目标是在swing应用程序中寻找一名学生,我成功地使用id进行搜索,因为它是第一个hashmap的关键,但我希望像这样使用它们: 因此,我的问题是:如果我想按姓名或姓氏搜索,如何获取第一个ha
Map<Interger, HashMap<String,String>> students = new HashMap<>();
其中第二个hashmap存储名称和lastname。
我的目标是在swing应用程序中寻找一名学生,我成功地使用id进行搜索,因为它是第一个hashmap的关键,但我希望像这样使用它们:
因此,我的问题是:如果我想按姓名或姓氏搜索,如何获取第一个hashmap的值并将其放入新的hashmap?您可以像这样在hashmap上迭代:
private int searchByName(String s) {
for(Map.Entry<Integer, HashMap<String, String>> entry : students.entrySet()) {
HashMap student = entry.getValue(); // Hashmap containing first and lastname
if (student.containsKey(s)) // If name match
return entry.getKey(); // Return the student ID
}
return 0; // Student not found
}
对于lastname,只需使用containsValues而不是containsKeys您可以使用Google Collections API Guava专门用于 bimap或双向映射是保留 其值及其键的唯一性。这个约束 使bimap支持反向视图,这是另一个bimap 包含与此bimap相同的条目,但具有相反的键和 价值观
有了这个,你就可以用名字和姓氏进行搜索了。此BiMap将是您的第一个父hashmap的值。我不确定数据结构是否最适合您的用例,但回答您的问题,您应该尝试使用values方法,该方法将返回映射的值集合
您可以维护3个hashmaps id作为键,name作为键等等,但是很有可能发生姓/名冲突,所以我会迭代name和last name。此外,你真的应该使用学生对象。为什么你要让自己的任务更复杂?Java是一种面向对象语言。定义类并使用它们。使用映射,而不是将学生的字段存储在HashMap中。我想我将创建一个学生类并从中开始,因为这看起来非常简单,谢谢@jbnitet:D
Collection res = studensts.values();
Iterator<HashMap<String, String>> i = res.iterator();
Map<String,String> resM = null;
while(i.hasNext()){
resM = i.next();
}