基本上,我有两个哈希图,一个包含以下值:
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);
}
}
答案 0 :(得分:10)
从我看到你不需要迭代。只是:
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()
循环中使用it2.next()
和while
。如果任何地图没有更多元素(it.hasNext()
) - 中断。
答案 1 :(得分: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
}