繁体   English   中英

Java中的Hashmap内HashMap的值

[英]Value of HashMap inside a Hashmap in Java

我有这个学生的哈希表,其中存储了ID,名称和姓氏。 所以我创建了这个:

Map<Interger, HashMap<String,String>> students = new HashMap<>();

第二个哈希图在其中存储名称和姓氏。 我的目标是在swing应用程序中寻找学生,我成功搜索了id,因为它是第一个哈希图的键,但是我想像这样使用所有这些对象:

在此处输入图片说明

所以我的问题是:如果要按名称或姓氏搜索,如何获取第一个哈希图的值并将其放在新的哈希图中?

您可以像这样在哈希图中进行迭代:

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
}

对于姓氏,只需使用containsValue(s)而不是containsKey(s)

您可以使用Google Collections API Guava专门用于BiMap

bimap(或“双向地图”)是一种保留其值以及其键的唯一性的地图。 此约束使bimap可以支持“反向视图”,这是另一个bimap,它包含与此bimap相同的条目,但具有相反的键和值。

使用此功能,您将可以使用名字和姓氏进行搜索。 此BiMap将成为您的第一个父哈希图的值。

我不确定数据结构是否适合您的用例,但要回答您的问题,您应该尝试使用values()方法,该方法将返回Map的值集合

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#values()

Collection res =  studensts.values();

Iterator<HashMap<String, String>> i = res.iterator();
Map<String,String> resM = null;
while(i.hasNext()){
   resM = i.next();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM