Java 如何遍历多个贴图
基本上,我有两个hashmap,其中一个包含以下值: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} 我基本上希望能够遍历第
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
}