3

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

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}

我基本上希望能够遍历第一个映射,找到键的匹配,如果找到匹配,获取关联的值,然后查看第二个映射,在键中找到匹配,然后拉出关联值(表示文件路径)。

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

String val2 = "rId33";

for (String rID: map.keySet())
{
     if (rID.contains(val2))
     {
         //enter code here
     }
}

我正在研究可用于 .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);
        }
    }
4

2 回答 2

11

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

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;
    }
}

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


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

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

于 2011-07-19T17:09:28.633 回答
1

这似乎非常低效。哈希映射的全部意义在于进行快速查找。你真的需要使用那个contains调用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
}
于 2011-07-19T17:27:26.747 回答