2010-04-23 101 views
3

我有地图:如何通过地图进行搜索?

Map<String, String> ht = new HashMap(); 

,我想知道如何通过它可以搜索并找到任何符合一个特定的字符串。如果它是一个匹配存储到一个数组列表。该地图包含字符串是这样的:

1,2,3,4,5,5,5

和匹配的字符串将是5

所以对我有这样的:

String match = "5"; 
    ArrayList<String> result = new ArrayList<String>(); 

Enumeration num= ht.keys(); 
    while (num.hasMoreElements()) { 
     String number = (String) num.nextElement(); 

     if(number.equals(match)) 
     { 
      result.add(number); 
     } 

    } 
+4

你想搜索的关键,值或两者? – mamboking 2010-04-23 15:22:56

+0

你的地图存储是什么?关键是什么?价值是什么?您建议您的地图包含1,2,3,4,5,5,5,但键必须是唯一的,所以它不能有3个键与字符串“5”。 – DaveJohnston 2010-04-23 15:24:48

+0

String number =(String)num.nextElement(); 会抛出ClassCastException – 2010-04-23 15:28:39

回答

2

显然你正试图找到值。因此,这里的东西,将工作:

Map<String, String> m = new HashMap<String, String>(); 
.. 

List<String> result = new ArrayList<String>(); 
    for(String s: m.values()){ 
     if(s.equals("5")){ 
      result.add(s); 
     } 
    } 

此外,观看null在你的if语句。

+0

我得到一个错误,指出“Incompatible types required:java.lang.string found:java.lang.object”。我通过这样的函数传递:public void Equal(Map m){...}是吗? – 2010-04-23 15:47:39

+1

啊不,它:public void Equal(Map m){...} – 2010-04-23 15:57:19

+0

你自己弄明白了。祝你好运与Java – 2010-04-23 16:23:04

5

不太清楚,如果我了解你,但我想你正在寻找containsKey

ht.containsKey("5"); 
+0

其实这比我的解决方案更好... – Fazal 2010-04-23 15:24:59

1

地图API不鼓励你使用任何枚举更作为一个很老的接口,并预期将在集合接口所取代,但遗留仍然是一个问题。

KeySet的方法返回你一套回来,你可以直接使用包含一套方法比较

3

我猜你想找到值的键。

简单代码:

List<String> matches = new ArrayList<String>(); 
for (Map.Entry<String,String> entry : map.keys()) { 
    if (targetValue.equals(entry.getValue())) { 
     matches.add(entry.getKey()); 
    } 
} 

更好的也许是使用第二个地图反向映射,或者从第三方库的双向映射。

+0

@Tom Hawtin - 斜线:确定,但在他的问题中看到*“1,2,3,4,5,5,5”*示例,我认为* a) *他想搜索值和* b)*可能有两个不同的键具有相同的值(如三个键的值为5)。在这种情况下,“传统”bidir地图不会削减它(我认为,但所有我使用的bidir地图都有独特的键和值,例如Google的Bimap IIRC,所以我真的不确定,而且我对此信息感兴趣)。 – SyntaxT3rr0r 2010-04-23 17:27:07

相关问题