Pergunta

Tenho um método que percorre os estados possíveis em um quadro e os armazena em um 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()?

   }
  }

}

Estou interessado no grupo de chaves.O que devo fazer para imprimir todos eles?

HashSet t = map.keySet() está sendo rejeitado pelo compilador, bem como

LinkedHashSet t = map.keySet()
Foi útil?

Solução

Usar:

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

Sempre tente especificar o tipo de interface para coleções retornadas por esses métodos. Dessa forma, independentemente da classe de implementação real do conjunto devolvido por esses métodos (no seu caso Map.KeySet ()), você ficaria bem. Dessa forma, se o próximo lançamento, os caras do JDK usarem uma implementação diferente para o conjunto de retorno, seu código ainda funcionará.

map.keyyset () retorna uma visualização nas teclas do mapa. Fazer alterações nessa visualização resulta na alteração do mapa subjacente, embora essas alterações sejam limitadas. Veja o Javadoc para mapa:

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

Outras dicas

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

É assim que eu gosto de iterar através de mapas. Se você deseja especificamente apenas o KeySet (), essa resposta está em outro lugar nesta página.

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

Definir t = map.ketSet()

A API não especifica que tipo de Set é retornado.

Você deve tentar declarar variáveis ​​como a interface em vez de uma implementação específica.

Apenas

Set t = map.keySet();

A menos que você esteja usando um JDK mais antigo, acho um pouco mais limpo para usar genéricos ao usar as aulas de coleções.

Então isso é

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

E então, se você apenas itera através deles, poderá usar qualquer tipo de loop que desejar. Mas se você estiver modificando o mapa com base nesse teclado, você deve usar o iterador do Keyset.

Tudo isso é garantido de keySet() é algo que implementa a interface Set. E isso poderia ser uma classe sem documentos como SecretHashSetKeys$foo, então basta programar para a interface Set.

Eu encontrei isso tentando ver uma visão de um TreeSet, o tipo de retorno acabou sendo TreeSet$3 em exame atento.

    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);

Ele coloca os valores -chave no mapa no conjunto.

De Javadocs HashMap possui vários métodos que podem ser usados ​​para manipular e extrair dados de um hasmap.

public Set<K> keySet()Retorna uma visualização Set das chaves contidas neste mapa.O conjunto é apoiado pelo mapa, portanto as alterações no mapa são refletidas no conjunto e vice-versa.Se o mapa for modificado enquanto uma iteração sobre o conjunto estiver em andamento (exceto por meio da operação de remoção do próprio iterador), os resultados da iteração serão indefinidos.O conjunto oferece suporte à remoção de elementos, que remove o mapeamento correspondente do mapa, por meio das operações Iterator.remove, Set.remove, removeAll, retenAll e clear.Ele não oferece suporte às operações add ou addAll.Especificado por:keySet na interface Mapa Substitui:keySet na classe AbstractMap Retorna:uma visão definida das chaves contidas neste mapa

então, se você tiver um mapa myMap de qualquer tipo de dados, de modo que o mapa definido como map<T> , se você iterar da seguinte maneira:

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

por exemplo, se o mapa foi definido como Map<Integer,Boolean>

Então para o exemplo acima teremos:

for (Integer key : myMap.keySet()){
  System.out.println(key) // the key printed out will be of type Integer
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top