我有一个方法可以遍历棋盘中的可能状态并将它们存储在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()
答案 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
}