Получение ключей из хэш-карты - PullRequest
1 голос
/ 01 марта 2011

Есть ли способ получить ключи хэш-карты, кроме как с помощью набора ключей? Я написал следующий код, у меня есть хэш-карта с именем map, она включает в себя целочисленные ключи и двойные значения:

    Set<Integer> keys = sorted_map.keySet();
    Object[] weel = new Object[keys.size()];
    Iterator it = keys.iterator();
    int l = 0;
    while(it.hasNext())
    {
        weel[l] = it.next();
    }

Теперь у меня есть массив, который включает ключи моей карты. но теперь мне нужно сравнить эти ключи с некоторым целым числом. например:

              if(weel[1] == 5) 

но так как тип weel - Object, я не могу сделать выше и также не могу привести его к int. как я могу это сделать? Является ли это возможным?

Ответы [ 4 ]

6 голосов
/ 01 марта 2011

Не уверен, почему вы хотите создать копию ключей, вы можете просто использовать ключи.

Вы можете сделать

List<Integer> keys = new ArrayList<Integer>(sorted_map.keySet());
if (kyes.get(1) == 5)

или

Integer[] keys = (Integer[]) sorted_map.keySet()
                 .toArray(new Integer[sorted_map.size()]);
if (kyes[1] == 5)

или

Iterator<Integer> iter = sorted_map.keySet().iterator();
iter.next(); // skip the first.
if(iter.next() == 5);
3 голосов
/ 01 марта 2011

Почему бы вам не объявить ваш массив как Integer[] или int[]?В последнем случае вы даже можете использовать == для сравнения.Однако в этом случае вы также неявно используете распаковку, что может повлиять на производительность, если у вас огромная карта.

1 голос
/ 01 марта 2011

Ваш набор ключей имеет тип Integer (не int), как вы правильно обозначили с помощью Set.Так что вы получаете из массива объекты типа Integer, которые не могут быть преобразованы в int.Что вы должны сделать, это создать массив типа Integer, а не Object, тогда, когда вы делаете сравнение, вы можете использовать метод intValue () Integer, чтобы получить его как int.

0 голосов
/ 01 марта 2011

Во-первых, вам не нужно использовать итератор для заполнения массива, вы можете вызвать метод .toArray () для набора ключей следующим образом:

sortedMap.keySet().toArray();

Затем все, что вам нужно сделать, - это привести каждый из них.элемент массива объектов в целое число, как вы его используете (или вы можете привести массив к целочисленному массиву при его создании)

if (((Integer)weel[1]0 == 5){
}

Также вы можете заметить, что ваш if if содержит только один =знак и присвоение не сравнение.

РЕДАКТИРОВАТЬ:

При отражении вы также можете использовать метод toArray, который фактически возвращает типизированный массив:

Set<Integer> keySet = new sortedMap.keySet();       
Integer[] weel = {};
weel = keySet.toArray(weel);

тогда у вас будет массив целых чисел, который вы можете сравнить с любым другим целым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...