Map в Java. Hashmap в Java
Данная статья:
- написана командой Vertex Academy.
- это одна из статей из нашего "Самоучителя по Java"
Привет! Это статья про Карты (Map), один из способов хранения данных в Java.
Что такое карта (Map)
К сожалению, карта (Map) в Java не имеет никакого отношения к картам из реального мира 🙂 Ну или почти никакого.
В программировании, карта (Map) - это структура данных, в которой объекты хранятся не по одному, как во всех остальных, а в паре "ключ - значение".
Ну вот представьте, что у нас есть обычный массив строк, в котором хранятся, например, имена людей - Вася, Катя, Лена:
Тем не менее, в карте мы храним пары "ключ-значение" - и обращаться к элементам мы будем не по индексам, а по ключам. В нашем случае ключ - это дата рождения:
Причем ключем может быть что угодно - число, строка или какой-нибудь другой объект.
Какие есть виды карт (map) в Java
Cреди основных реализаций можно назвать:
- HashMap
- LinkedHashMap
- TreeMap
- Hashtable
Если представить в виде диаграммы, будет выглядеть так:
Но для начала этого явно многовато 🙂 Поэтому по теме "map в Java" мы чуть позже напишем несколько статей. А пока эта статья будет как вводная с основным акцентом на HashMap.
Давайте посмотрим, чем они друг от друга отличаются.
- HashMap - хранит значения в произвольном порядке, но позволяет быстро искать элементы карты. Позволяет задавать ключ или значение ключевым словом null.
- LinkedHashMap - хранит значения в порядке добавления.
- TreeMap - сама сортирует значения по заданному критерию. TreeMap используется либо с Comparable элементами, либо в связке с Comparator. Смотрите статью "Интерфейсы Comparable и Comparator".
- Hashtable - как HashMap, только не позволяет хранить null и синхронизирован с точки зрения многопоточности - это значит, что много потоков могут работать безопасно с Hashtable. Но данная реализация старая и медленная, поэтому сейчас уже не используется в новых проектах.
Можно сказать, что для начала Вам хватит знать и уметь работать с HashMap. Именно на ней мы и будем приводить примеры.
Синтаксис HashMap
Создание объекта типа Map похоже на создание коллекций - только мы должны задавать два типа - тип ключа и тип значения:
1 |
HashMap<String, Integer> myHashMap = new HashMap<String, Integer>(); |
Операции с Map
Ниже мы рассмотрим 6 операций с Map:
1. put(K key, V value) - добавляет элемент в карту;
2. get(Object key) - ищет значение по его ключу;
3. remove(Object key) - удаляет значение по его ключу;
4. containsKey(Object key) - спрашивает, есть ли в карте заданный ключ;
5. containsValue(Object value) - спрашивает есть ли в карте заданное значение;
6. size() - возвращает размер карты (количество пар "ключ-значение").
Пример 1
- put(K key, V value) - добавляем элемент в карту. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { HashMap<String, String> myHashMap = new HashMap<String, String>(); myHashMap.put("Basil", "07.12.1987"); myHashMap.put("Kate", "12.10.1971"); myHashMap.put("Lena", "11.01.1991"); for(Map.Entry<String, String> entry: myHashMap.entrySet()) System.out.println(entry.getKey() + " - " + entry.getValue()); } } |
Если мы запустим этот код на компьютере, то в консоли то получим:
Отлично - все так, как мы и планировали 🙂
Пример 2
- get(Object key) - ищем значение по его ключу. Например:
1 2 3 4 5 6 7 8 9 10 11 |
public static void main(String[] args) { HashMap<String, String> myHashMap = new HashMap<String, String>(); myHashMap.put("Basil", "07.12.1987"); myHashMap.put("Kate", "12.10.1971"); myHashMap.put("Lena", "11.01.1991"); System.out.println("The value for 'Basil' is " + myHashMap.get("Basil")); } } |
Если мы запустим этот код на компьютере, то в консоли то получим:
Опять же, все, как мы и предполагали.
Пример 3
- remove(Object key) - удаляем значение по его ключу. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class Test { public static void main(String[] args) { HashMap<String, String> myHashMap = new HashMap<String, String>(); myHashMap.put("Basil", "07.12.1987"); myHashMap.put("Kate", "12.10.1971"); myHashMap.put("Lena", "11.01.1991"); System.out.println("Before removing a key:"); for(Map.Entry<String, String> entry: myHashMap.entrySet()) System.out.println(entry.getKey() + " - " + entry.getValue()); myHashMap.remove("Kate"); System.out.println("\nAfter removing the key:"); for(Map.Entry<String, String> entry: myHashMap.entrySet()) System.out.println(entry.getKey() + " - " + entry.getValue()); } } |
Итак, мы удалили запись с ключом "Kate". Получаем:
Пример 4
- containsKey(Object key) - спрашиваем, есть ли в карте заданный ключ. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { HashMap<String, String> myHashMap = new HashMap<String, String>(); myHashMap.put("Basil", "07.12.1987"); myHashMap.put("Kate", "12.10.1971"); myHashMap.put("Lena", "11.01.1991"); System.out.println("Do we have 'Basil'? " + myHashMap.containsKey("Basil")); System.out.println("Do we have 'Victoria'? " + myHashMap.containsKey("Victoria")); } } |
Получаем:
Пример 5
- containsValue(Object value) - спрашиваем, есть ли в карте заданное значение. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { HashMap<String, String> myHashMap = new HashMap<String, String>(); myHashMap.put("Basil", "07.12.1987"); myHashMap.put("Kate", "12.10.1971"); myHashMap.put("Lena", "11.01.1991"); System.out.println("Do we have a value'12.10.1971'? " + myHashMap.containsValue("12.10.1971")); System.out.println("Do we have a value 'lalala'? " + myHashMap.containsValue("lalala")); } } |
Получаем:
Пример 6
- size() - возвращает размер карты (количество пар "ключ-значение"). Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Test { public static void main(String[] args) { HashMap<String, String> myHashMap = new HashMap<String, String>(); myHashMap.put("Basil", "07.12.1987"); myHashMap.put("Kate", "12.10.1971"); myHashMap.put("Lena", "11.01.1991"); System.out.println("The size of map is " + myHashMap.size()); } } |
Получаем:
Надеемся, что наша статья была Вам полезна. Можно записаться к нам на курсы по Java на сайте.