5

我有一种方法可以遍历板上的可能状态并将它们存储在 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()
4

9 回答 9

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

于 2009-12-11T01:48:58.470 回答
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(),则该答案在此页面的其他位置。

于 2009-12-11T03:06:34.817 回答
4
for ( String key : map.keySet() ) { 
 System.out.println( key );
}
于 2009-12-11T02:27:01.700 回答
0

设置 t = map.ketSet()

API 没有指定返回什么类型的 Set。

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

于 2009-12-11T01:39:41.140 回答
0

只是

Set t = map.keySet();
于 2009-12-11T01:39:51.620 回答
0

除非您使用的是较旧的 JDK,否则我认为在使用 Collections 类时使用泛型会更简洁一些。

所以那是

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

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

于 2009-12-11T02:08:23.763 回答
0

所保证的keySet()只是实现接口的东西Set。这可能是一些未记录的类SecretHashSetKeys$foo,所以只需对接口进行编程Set

我在试图了解 a 时遇到了这个问题TreeSet,返回类型最终被TreeSet$3仔细检查了。

于 2009-12-11T02:29:19.883 回答
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);

它将映射中的键值放入集合中。

于 2017-11-23T04:00:21.103 回答
0

From JavadocsHashMap有几种方法可用于从 hasmap 中操作和提取数据。

public Set<K> keySet() 返回此映射中包含的键的 Set 视图。集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。该集合支持元素移除,即通过 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
}
于 2018-10-10T12:23:56.447 回答