如何迭代多个地图

Thi*_*mer 2 java collections hashmap map linkedhashmap

基本上,我有两个哈希图,一个包含以下值:

rId33=image23
rId32=image22
rId37=image2
Run Code Online (Sandbox Code Playgroud)

而另一个包含这些数据:

{image2.jpeg=C:\Documents and Settings\image2.jpeg, image22.jpeg=C:\Documents and Settings\image22.jpeg, image23.jpeg=C:\Documents and Settings\image23.jpeg}
Run Code Online (Sandbox Code Playgroud)

我基本上希望能够遍历第一个地图,找到钥匙的匹配,如果找到匹配,获取相关值,然后查看第二个地图,找到钥匙中的匹配,然后拉出关联value(表示文件路径).

我正在考虑做这样的事情(以下简化)......

String val2 = "rId33";

for (String rID: map.keySet())
{
     if (rID.contains(val2))
     {
         //enter code here
     }
}
Run Code Online (Sandbox Code Playgroud)

我正在研究像.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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 10

从我看到你不需要迭代.只是:

String value1 = map1.get(key1);
if (value1 != null) {
    String path = map2.get(value1 + ".jpeg");
}
Run Code Online (Sandbox Code Playgroud)

如果您不总是知道它是否value1 + ".jpeg",但您只知道键以第一个值开始,那么您可以使用以下内容迭代第二个映射:

for (Map.Entry<String, String> entry : map2.entrySet()) {
    String key2 = entry.getKey();
    String value2 = entry.getValue();
    if (key.startsWith(value1)) {
        return value2;
    }
}
Run Code Online (Sandbox Code Playgroud)

但请注意,第一个代码片段是O(1)(两个操作都需要恒定时间),而第二个代码片段是O(n)


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

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

  • 幸运的是,它不会是迭代.这是O(1) (2认同)