Вопрос

У меня есть метод, который проходит через возможные состояния в доске и хранит их в хэшмапе

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, вы должны использовать итератор 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 имеет несколько методов, которые можно использовать для манипулирования и извлечения данных из HASMAP.

public Set<K> keySet()Возвращает установленное представление о ключах, содержащихся на этой карте. Набор поддерживается картой, поэтому изменения в карте отражаются в наборе, и наоборот. Если карта модифицирована, в то время как итерация над набором находится (за исключением собственной операции удаления итератора), результаты итерации не определены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение с карты через iterator.remove, set.remove, removeall, retainall и четкие операции. Он не поддерживает операции Add или Addall. Указано: keyset в интерфейсной карте Переопределение: Keyset в классе AbstractMap Возврат: установленное представление клавиш, содержащихся на этой карте

Так что, если у вас есть карта 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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top