Java Урок 58: КОЛЛЕКЦИИ, HashMap<>

Коллекции типа Map представляют такие наборы, в которых каждый объект представляет пару «ключ-значение». Такие коллекции облегчают поиск элемента, если нам известен ключ — уникальный идентификатор объекта.

Скачать исходники для статьи можно ниже

Коллекции типа Map реализуют обобщенный интерфейс Map, который определяет основную функциональность через следующие методы:

void clear(): очищает коллекцию
boolean containsKey(Object k): возвращает true, если коллекция содержит ключ k
boolean containsValue(Object v): возвращает true, если коллекция содержит значение v
Set<Map.Entry<K, V>> entrySet(): возвращает набор элементов коллекции. Все элементы представляют объект Map.Entry
boolean equals(Object obj): возвращает true, если коллекция идентична
коллекции, передаваемой через параметр obj
boolean isEmpty: возвращает true, если коллекция пуста
V get(Object k): возвращает значение объекта, ключ которого равен k. 
Если такого элемента не окажется, то возвращается значение null
V put(K k, V v): помещает в коллекцию новый объект с ключом k и значением v. Если в коллекции уже есть объект с подобным ключом, то он 
перезаписывается. После добавления возвращает предыдущее значение 
для ключа k, если он уже был в коллекции. Если же ключа еще не было в коллекции, то возвращается значение null
Set<K> keySet(): возвращает набор всех ключей коллекции
Collection<V> values(): возвращает набор всех значений отображения
void putAll(Map<? extends K, ? extends V> map): добавляет в коллекцию все объекты из коллекции map
V remove(Object k): удаляет объект с ключом k
int size(): возвращает количество элементов коллекции

Чтобы положить объект в коллекцию, используется метод put, а чтобы получить по ключу — метод get.

Реализация интерфейса Map также позволяет получить наборы как
ключей, так и значений.
А метод entrySet() возвращает набор всех элементов в виде объектов Map.Entry. Обобщенный интерфейс Map.Entry представляет объект с ключом типа K и значением типа V и определяет следующие методы:

boolean equals(Object obj): возвращает true, если объект obj, представляющий интерфейс Map.Entry, идентичен текущему
K getKey(): возвращает ключ объекта отображения
V getValue(): возвращает значение объекта отображения
Set<K> keySet(): возвращает набор всех ключей отображения
V setValue(V v): устанавливает для текущего объекта значение v
int hashCode(): возвращает хеш-код данного объекта

При переборе объектов коллекции Map мы будем оперировать этими методами для работы с ключами и значениями объектов.

Map-коллекции в Java представлены несколькими классами. Базовым классом для всех map-коллекций является абстрактный класс AbstractMap, который реализует большую часть методов интерфейса Map.
Наиболее распространенным классом отображений является HashMap, который реализует интерфейс Map и наследуется от класса AbstractMap.

Пример использования класса:

public class DemoShipment {

   public static void main(String[] args) {

      Map<Integer, String> states = new HashMap<Integer, String>();
      states.put(1, "Германия");
      states.put(2, "Испания");
      states.put(4, "Франция");
      states.put(3, "Италия");

      // получим объект по ключу 2
      String first = states.get(2);
      System.out.println(first);
      // получим весь набор ключей
      Set<Integer> keys = states.keySet();
      // получить набор всех значений
      Collection<String> values = states.values();
      // удаление элемента по ключу 2
      states.remove(2);
      // перебор элементов
      for (Map.Entry<Integer, String> item : states.entrySet()) {

         System.out.println("Ключ: " + item.getKey() + "Значение: " + item.getValue());
      }

      Map<String, >people = new HashMap<String, Person>();
      people.put("1240i54", new Person("Tom"));
      people.put("1564i55", new Person("Bill"));
      people.put("4540i56", new Person("Nick"));

      for (Map.Entry<String, Person> item : people.entrySet()) {
         System.out.println("Ключ: " + item.getKey() + " Значение: " + item.getValue().getName
      }
   }
}

class Person {
   private String name;

   public Person(String value) {
      name = value;
   }

   String getName() {
      return name;
   }
}

Вывод программы:
Испания
Ключ: 1 Значение: Германия
Ключ: 3 Значение: Италия
Ключ: 4 Значение: Франция
Ключ: 1240i54 Значение: Tom
Ключ: 1564i55 Значение: Bill
Ключ: 4540i56 Значение: Nick

Чтобы добавить или заменить элемент, используется методы put либо replace, а чтобы получить его значение по ключу — метод get. С помощью других методов интерфейса Map также производятся другие манипуляции над элементами: перебор, получение ключей, значений, удаление.

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

Добавить комментарий