Hashmapでkeyset()メソッドを使用します
-
19-09-2019 - |
質問
ボード内の可能な状態を通過し、それらをハッシュマップに保存する方法があります
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()
解決
使用する:
Set<MyGenericType> keySet = map.keySet();
これらのメソッドによって返されるコレクションのインターフェイスタイプを常に指定してください。この方法では、これらのメソッドによって返されるセットの実際の実装クラスに関係なく(ケースmap.keyset())、問題ありません。このように、次のリリースがJDKの男たちが返されたセットに別の実装を使用している場合、あなたのコードは引き続き機能します。
map.keyset()マップのキーに関するビューを返します。このビューを変更すると、これらの変更は限られていますが、基礎となるマップが変更されます。マップについてはJavadocを参照してください:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/map.html#keyset%28%29
他のヒント
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()のみを具体的に必要とする場合、その答えはこのページの他の場所にあります。
for ( String key : map.keySet() ) {
System.out.println( key );
}
t = map.ketset()を設定します
APIは、どのタイプのセットが返されるかを指定しません。
特定の実装ではなく、変数をインターフェイスとして宣言してみてください。
ただ
Set t = map.keySet();
古いJDKを使用していない限り、コレクションクラスを使用するときにジェネリックを使用するのが少しきれいだと思います。
だから〜だ
Set<MyType> s = map.keySet();
そして、それらを繰り返すだけなら、あなたが望むあらゆる種類のループを使用することができます。ただし、このキーセットに基づいてマップを変更する場合は、キーセットのイテレーターを使用する必要があります。
それはすべてから保証されています keySet()
インターフェイスを実装するものです Set
. 。そして、それはおそらく文書化されていないクラスのようなものかもしれません SecretHashSetKeys$foo
, 、したがって、インターフェイスにプログラムするだけです Set
.
私はこれに出くわしました TreeSet
, 、リターンタイプは最終的になりました TreeSet$3
綿密な検査で。
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);
マップ内のキー値をセットに入れます。
Javadocsから HashMap
ハスマップからデータを操作および抽出するために使用できるいくつかの方法があります。
public Set<K> keySet()
このマップに含まれるキーの設定ビューを返します。セットはマップに裏付けられているため、マップの変更はセットに反映され、その逆も同様です。セット上の反復が進行中にマップが変更されている場合(イテレーター独自の削除操作を除く)、反復の結果は未定義です。このセットは、Iterator.Remove、set.Remove、Removeall、Removeall、およびClear操作を介して、マップから対応するマッピングを削除する要素削除をサポートします。追加または追加操作をサポートしていません。指定:インターフェイスマップのキーセットオーバーライド:クラスのキーセットアブストラクトマップリターン:このマップに含まれるキーのセットビュー
したがって、データ型のマップ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
}