在HashMap中使用keySet()方法

时间:2009-12-11 01:36:21

标签: java hashmap hashset linkedhashset

我有一个方法可以遍历棋盘中的可能状态并将它们存储在HashMap中

void up(String str){
  int a = str.indexOf("0");
  if(a>2){
   String s = str.substring(0,a-3)+"0"+str.substring(a-2,a)+str.charAt(a-3)+str.substring(a+1);
   add(s,map.get(str)+1);
   if(s.equals("123456780")) {
    System.out.println("The solution is on the level  "+map.get(s)+" of the tree");

        //If I get here, I need to know the keys on the map
       // How can I store them and Iterate through them using 
      // map.keySet()?

   }
  }

}

我对这组键很感兴趣。我该怎么做才能打印出来?

HashSet t = map.keySet()被编译器和

拒绝
LinkedHashSet t = map.keySet()

9 个答案:

答案 0 :(得分:5)

使用:

Set<MyGenericType> keySet = map.keySet();

始终尝试为这些方法返回的集合指定接口类型。这种方式无论这些方法返回的Set的实际实现类(在你的情况下是map.keySet())你都可以。这样,如果下一个版本的jdk家伙为返回的Set使用不同的实现,你的代码仍然可以工作。

map.keySet()返回地图键上的视图。虽然这些更改有限,但对此视图进行更改会导致更改基础地图。请参阅地图的javadoc:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html#keySet%28%29

答案 1 :(得分:5)

Map<String, String> someStrings = new HashMap<String, String>();
for(Map.Entry<String, String> entry : someStrings.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
}

这就是我喜欢迭代地图的方式。如果您只想要keySet(),那么该答案就在本页的其他地方。

答案 2 :(得分:4)

for ( String key : map.keySet() ) { 
 System.out.println( key );
}

答案 3 :(得分:0)

设置t = map.ketSet()

API未指定返回的Set类型。

您应该尝试将变量声明为接口而不是特定的实现。

答案 4 :(得分:0)

只是

Set t = map.keySet();

答案 5 :(得分:0)

除非您使用较旧的JDK,否则在使用Collections类时使用泛型会更清晰。

那就是

Set<MyType> s = map.keySet();

然后如果你只是遍历它们,那么你可以使用你想要的任何类型的循环。但是如果您要基于此keySet修改地图,则必须使用keySet的迭代器。

答案 6 :(得分:0)

keySet()保证的所有内容都是实现接口Set的东西。这可能是一些未记录的类,如SecretHashSetKeys$foo,所以只需编程到接口Set

我遇到了这个尝试获取TreeSet的视图,返回类型最终被TreeSet$3仔细检查。

答案 7 :(得分:0)

    Map<String, Object> map = new HashMap<>();
    map.put("name","jaemin");
    map.put("gender", "male");
    map.put("age", 30);
    Set<String> set = map.keySet();
    System.out.println("this is map : " + map);
    System.out.println("this is set : " + set);

它将地图中的键值放入集合中。

答案 8 :(得分:0)

从Javadocs HashMap起,有几种方法可用于处理hasmap和从hasmap中提取数据。

public Set<K> keySet() 返回此映射中包含的键的Set视图。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(通过迭代器自己的remove操作除外),则迭代的结果不确定。该集合支持元素删除,该元素通过Iterator.remove,Set.remove,removeAll,retainAll和clear操作从映射中删除相应的映射。它不支持add或addAll操作。 指定者: 接口Map中的keySet 覆写: 类AbstractMap中的keySet 返回值: 该地图中包含的键的设置视图

因此,如果您具有任何数据类型的地图myMap,则将地图定义为map<T>,则可以按以下方式对其进行迭代:

for (T key : myMap.keySet() ) { 
     System.out.println(key); // which represent the value of datatype T
}

例如,如果地图被定义为Map<Integer,Boolean>

然后对于上面的示例,我们将得到:

for (Integer key : myMap.keySet()){
  System.out.println(key) // the key printed out will be of type Integer
}