Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何遍历多个贴图_Java_Collections_Map_Hashmap_Linkedhashmap - Fatal编程技术网

Java 如何遍历多个贴图

Java 如何遍历多个贴图,java,collections,map,hashmap,linkedhashmap,Java,Collections,Map,Hashmap,Linkedhashmap,基本上,我有两个hashmap,其中一个包含以下值: rId33=image23 rId32=image22 rId37=image2 另一个包含以下数据: {image2.jpeg=C:\Documents and Settings\image2.jpeg, image22.jpeg=C:\Documents and Settings\image22.jpeg, image23.jpeg=C:\Documents and Settings\image23.jpeg} 我基本上希望能够遍历第

基本上,我有两个hashmap,其中一个包含以下值:

rId33=image23
rId32=image22
rId37=image2
另一个包含以下数据:

{image2.jpeg=C:\Documents and Settings\image2.jpeg, image22.jpeg=C:\Documents and Settings\image22.jpeg, image23.jpeg=C:\Documents and Settings\image23.jpeg}
我基本上希望能够遍历第一个映射,找到键的匹配项,如果找到匹配项,则获取相关值,然后查看第二个映射,在键中找到匹配项,然后拉出相关值(即文件路径)

例如,我正在考虑做类似的事情(下面是简化的)

我一直在研究.getValue之类的可用方法,但我不完全确定如何做到这一点。任何帮助都将不胜感激。提前感谢您的回复

在Bozho的帮助下编辑代码

else if ("v:imagedata".equals(qName) && headingCount > 0)
{
    val2 = attributes.getValue("r:id");
    String rID = imageMap.get(val2);
    String path = imageLocation.get(rID + ".jpeg");

    for (String rels: imageMap.keySet())
    {
        if (rels.contains(val2))
        {
        inImage = true;
        image docImage = new image();

        imageCount++;

        docImage.setRelID(val2);
        docImage.setPath(path);
        addImage(docImage);
        }
    }

据我所见,您不需要迭代。只是:

String value1 = map1.get(key1);
if (value1 != null) {
    String path = map2.get(value1 + ".jpeg");
}
如果您并不总是知道它是否为
value1+”.jpeg“
,但您只知道该键以第一个值开头,则可以使用以下命令迭代第二个贴图:

for (Map.Entry<String, String> entry : map2.entrySet()) {
    String key2 = entry.getKey();
    String value2 = entry.getValue();
    if (key.startsWith(value1)) {
        return value2;
    }
}
for(Map.Entry:map2.entrySet()){
字符串key2=entry.getKey();
String value2=entry.getValue();
if(键启动带(值1)){
返回值2;
}
}
但是请注意,第一个代码片段是
O(1)
(两个操作都需要固定的时间),而第二个代码片段是
O(n)


并回答标题中提出的问题:


获取两个映射的迭代器,并在
while
循环中使用
it1.next()
it2.next()
。如果任何一个映射没有更多的元素(
it.hasNext()
)-break.

这似乎效率很低。散列映射的整个要点是进行快速查找。您真的需要使用
包含的
调用
rID
?换句话说,能否更改哈希映射,使其直接包含要搜索的逐字记录字符串,而不仅仅是包含要作为子字符串搜索的字符串?如果是,您可以使用已经给出的答案。如果不是,并且无论出于何种原因,您必须使用这些数据结构,那么您尝试执行的方法如下:

String val2 = "rId33";
String path;

for (String rID: map.keySet())
{
    if (rID.contains(val2))
    {
        path = secondMap.get(map.get(rID)+".jpeg");
        break;
    }
}
if (path == null)
{
   //value not found
}

幸运的是,它不会是迭代。这是O(1)哈哈,我喜欢解决这么简单的问题。我编辑了我的原始帖子,以包含我实现的代码。如果没有剩下的代码,它可能没有多大意义,但也许它可以帮助某些人。非常感谢@Bozho@thrutheality:虽然文档没有真正提到它,但我认为它仍然是一个基于散列的集合,这意味着它将允许O(1)访问(如果散列不太糟糕)。@这是:最好将代码作为答案发布,而不是将其放入问题中。如果Bozho的答案对您有所帮助,请单击“接受”按钮。
String val2 = "rId33";
String path;

for (String rID: map.keySet())
{
    if (rID.contains(val2))
    {
        path = secondMap.get(map.get(rID)+".jpeg");
        break;
    }
}
if (path == null)
{
   //value not found
}