2013-05-12 2 views
1

Я хочу написать программу, которая выводит записи «0» и «4» из HashMap (т.е. entry.getKey (0) и entry.getKey (4), но это не позволит мне сделайте это) Каким будет другой способ использования того, что у меня уже есть?HashMap: печать конкретных записей

В принципе у меня есть это:

HashMap<String, Integer> hm = new HashMap<String, Integer>(); 

я могу перебирать каждую запись, используя этот код:

for (Map.Entry<String,Integer> entry : hm.entrySet()) 
{ 
    System.out.println(entry.getKey() + "/" + entry.getValue()); 
} 

Поскольку люди попросили дополнительной контекстной информации, я храню набор строк в HashMap. Например, 0-я запись - «Боб», первая запись - «Минди», вторая - «Ясир», третья - «Грег», а четвертая - «Джеки». Я хочу, чтобы программа распечатывала 0-ю и 4-ю записи заполненной HashMap.

+0

так, речь идет? – sanbhat

+1

Используйте 'hm.get (" 0 ")' и 'hm.get (" 4 ")'? – nhahtdh

+0

@sanbhat: Я получаю элемент по ключевым словам. В любом случае нет понятия индекса в Map или Set. – nhahtdh

ответ

3

Если вы специфичны о ключах в Map, вы можете напрямую использовать get() method.Like это,

Integer value = hm.get("0"); 

Если вы хотите перебрать затем использовать что-то вроде кода ниже:

HashMap<String, Integer> hm = new HashMap<String, Integer>(); 
for (Entry<String, Integer> entry : hm.entrySet()) 
{ 
    String key = entry.getKey(); 
    if(key.equals("0") || key.equals("1")) 
    System.out.println(key + "/" + entry.getValue()); 
} 

Нельзя передать индекс методу getKey(), например getKey(0) и т. Д. См. Документацию.

HashMapкласс не дает никаких гарантий относительно порядка карты; в частности, он не гарантирует, что порядок будет оставаться постоянным с течением времени. Итак, если вы хотите извлечь значения из HashMap на основе индекса, возможно, это невозможно. Ближе к вашему требованию будет что-то вроде LinkedHashMap, в котором хранится порядок ключей для ввода/доступа.

HashMap работы по принципу хеширования, мы имеем put(key, value)get(key) и способ хранения и извлечения объектов из HashMap. Когда мы передаем ключ и значение объект для put() метода на Java HashMap, HashMap реализации вызывает hashCode() метод на ключевом объекте и прикладывает вернулась hashcode() в свою собственную функцию хеширования, чтобы найти место ведра для хранения Entry объекта, важный момент, чтобы отметить, что HashMap в Java хранит как ключ, так и объект значения как Map.Entry в ведро, что необходимо для понимания логики получения.

+0

Зачем вам повторять ** всю карту **, чтобы получить значение 2 ключа? – nhahtdh

+1

Посмотрите на первую строку Пожалуйста! – NINCOMPOOP

+0

Нет смысла итерации по карте. Просто покажите правильный путь. – nhahtdh

2

У HashMap нет определенного порядка ключей. Вы можете использовать LinkedHashMap вместо HashMap. Он всегда будет возвращать ключи в том же порядке (как вставка) при вызове keySet(). И затем вы выбираете 0-й или 4-й ключ. Позднее вы можете получить значение для ключей, которые вы выбрали на 0-м и 4-м месте.

+0

Я думаю, что * key * - это строка «0», а не позиция – Bohemian

+0

@Bohemian: Я думаю, что OP объяснил, что 0 и 4 - это упорядочение (предполагается, что индекс) некоторой записи внутри HashMap. LinkedHashMap является ближайшим, который предлагает доступ по индексу. – nhahtdh

1

Я бы порекомендовал просто использовать метод get() с предоставленным ключом. Итерация в этом случае не нужна.

+0

'HashMap' использует ключ, а не индекс. Пожалуйста, будьте более конкретными для будущих читателей :) – christopher

+1

Спасибо за указание, что вне :) – ljlozano

+0

+1 для редактирования :) – christopher

0

Поскольку люди запрашивали больше контекстной информации, я сохраняю набор строк в HashMap. Например, 0-я запись - «Боб», первая запись - «Минди», вторая - «Ясир», третья - «Грег», а четвертая - «Джеки». Я хочу, чтобы программа распечатывала 0-ю и 4-ю записи заполненной HashMap.

Как это используется, HashMap не имеет смысла. Используйте вместо этого String[]!

String[] names = {"Bob", "Mindy", "Yasser", "Greg", "Jacky" }; 
    System.out.println("When " + names[0] + " met " + names[4]); 
0

Почему не целенаправленный подход:

String[] targets = {"0", "4"}; 
for (String target : targets) { 
    System.out.println(target + "/" + hm.get(target)); 
} 

путь более эффективен, чем «большой молоток» полная итерация подход, и вы получите выходной заказ бесплатно.

0

Если у вас есть много записей на вашей карте, вы можете рассмотреть возможность использования одной из навигационных коллекций, например TreeMap.

NavigableMap<String,String> map = new TreeMap<>() 
    map.subMap("0", true, "4", true); 

визит: http://docs.oracle.com/javase/6/docs/api/java/util/NavigableMap.html

Смежные вопросы