Класс Java LinkedHashMap: Дружественное руководство для начинающих
Введение
Приветствую, будущие маги Java! Сегодня мы отправляемся в захватывающее путешествие в мир LinkedHashMap. Не волнуйтесь, если вы никогда не писали ни одной строчки кода — я стану вашим дружественным гидом, и мы будем исследовать эту тему шаг за шагом. К концу этого урока вы будете удивлены, сколько вы уже выучили!
LinkedHashMap — это как магическая коробка, которая может хранить ваши предметы (в программировании мы называем их парами ключ-значение) в определенном порядке. Представьте себе, что вы упорядочиваете свои любимые книги на полке. Вы не только можете быстро найти любую книжку, но и можете сохранять их в том порядке, в котором вы добавляли их, или на основе того, как часто вы их читаете. Вот именно это делает LinkedHashMap с нашими данными!
Объявление класса
Начнем с того, как мы объявляем LinkedHashMap в Java:
import java.util.LinkedHashMap;
public class MyLinkedHashMapExample {
public static void main(String[] args) {
LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();
}
}
В этом примере мы создаем LinkedHashMap под названием myBookshelf
. Часть <String, Integer>
сообщает Java, что мы будем использовать строковые ключи (названия книг) и целочисленные значения (возможно, количество страниц). Не волнуйтесь, если это сейчас кажется запутанным — мы разберем это по мере нашего продвижения!
Параметры
При работе с LinkedHashMap у нас есть несколько параметров, которые следует учитывать:
- initialCapacity: Это как решение о том, какой должна быть начальная вместимость вашей полки.
- loadFactor: Представьте себе, что это как насколько полка может быть полной, прежде чем вам понадобится более большая.
- accessOrder: Это определяет, будут ли книги упорядочены по времени добавления или по частоте доступа.
Посмотрим на пример:
LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>(16, 0.75f, true);
Здесь мы говорим, что наша начальная полка может содержать 16 книг, мы рассмотрим возможность покупки большей полки, когда она будет заполнена на 75%, и мы хотим упорядочивать книги на основе частоты доступа.
Конструкторы класса
LinkedHashMap предлагает несколько способов создания нашей магической полки. Вот основные конструкторы:
-
LinkedHashMap()
: Создает пустой LinkedHashMap с 默认ными настройками. -
LinkedHashMap(int initialCapacity)
: Указывает начальную вместимость. -
LinkedHashMap(int initialCapacity, float loadFactor)
: Указывает как начальную вместимость, так и коэффициент нагрузки. -
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
: Указывает все три параметра. -
LinkedHashMap(Map<? extends K, ? extends V> m)
: Создает LinkedHashMap с теми же маппингами, что и указанная карта.
Попробуем создать LinkedHashMapы с использованием различных конструкторов:
LinkedHashMap<String, Integer> shelf1 = new LinkedHashMap<>();
LinkedHashMap<String, Integer> shelf2 = new LinkedHashMap<>(20);
LinkedHashMap<String, Integer> shelf3 = new LinkedHashMap<>(20, 0.8f);
LinkedHashMap<String, Integer> shelf4 = new LinkedHashMap<>(20, 0.8f, true);
Map<String, Integer> existingMap = new HashMap<>();
existingMap.put("Java Basics", 200);
LinkedHashMap<String, Integer> shelf5 = new LinkedHashMap<>(existingMap);
Каждый из этих примеров создает слегка различную "полку" в зависимости от наших потребностей. Неужели Java не удивительно гибкая?
Методы класса
Теперь рассмотрим некоторые из наиболее часто используемых методов в LinkedHashMap. Я представлю их в виде таблицы для легкого обращения:
Метод | Описание |
---|---|
put(K key, V value) |
Добавляет новую пару ключ-значение в LinkedHashMap |
get(Object key) |
Возвращает значение, связанное с указанным ключом |
remove(Object key) |
Удаляет маппинг для указанного ключа |
clear() |
Удаляет все маппинги из LinkedHashMap |
size() |
Возвращает количество пар ключ-значение в LinkedHashMap |
isEmpty() |
Возвращает true, если LinkedHashMap пуст |
containsKey(Object key) |
Возвращает true, если LinkedHashMap содержит указанный ключ |
containsValue(Object value) |
Возвращает true, если LinkedHashMap содержит указанное значение |
keySet() |
Возвращает набор всех ключей в LinkedHashMap |
values() |
Возвращает коллекцию всех значений в LinkedHashMap |
entrySet() |
Возвращает набор всех пар ключ-значение в LinkedHashMap |
Посмотрим на некоторые из этих методов в действии:
LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();
// Добавление книг на нашу полку
myBookshelf.put("Java Basics", 200);
myBookshelf.put("Data Structures", 350);
myBookshelf.put("Algorithms", 400);
// Получение количества страниц для "Java Basics"
int javaPages = myBookshelf.get("Java Basics");
System.out.println("Java Basics имеет " + javaPages + " страниц.");
// Проверка, есть ли у нас книга по Python
boolean hasPython = myBookshelf.containsKey("Python for Beginners");
System.out.println("У нас есть книга по Python? " + hasPython);
// Удаление книги "Algorithms"
myBookshelf.remove("Algorithms");
// Печать всех названий книг
for (String title : myBookshelf.keySet()) {
System.out.println("Название книги: " + title);
}
Этот фрагмент кода демонстрирует, как мы можем добавлять книги на нашу полку, получать информацию о них, проверять, есть ли у нас определенные книги, удалять книги и перечислять все книги, которые у нас есть. Не плохо, правда?
Наследуемые методы
LinkedHashMap также наследует методы от своих родительских классов. Вот некоторые важные:
Наследовано от | Методы |
---|---|
HashMap |
clone() , compute() , computeIfAbsent() , computeIfPresent() , merge()
|
AbstractMap |
equals() , hashCode() , toString()
|
Object |
finalize() , getClass() , notify() , notifyAll() , wait()
|
Эти наследуемые методы предоставляют дополнительную функциональность, которая может быть очень полезной в определенных ситуациях.
Пример получения значения из LinkedHashMap
Закончим с полным примером создания LinkedHashMap, добавления некоторых значений и их извлечения:
import java.util.LinkedHashMap;
public class BookshelfExample {
public static void main(String[] args) {
LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();
// Добавление книг на нашу полку
myBookshelf.put("Java Basics", 200);
myBookshelf.put("Data Structures", 350);
myBookshelf.put("Algorithms", 400);
// Извлечение и печать информации о каждой книге
for (String title : myBookshelf.keySet()) {
int pages = myBookshelf.get(title);
System.out.println("Книга '" + title + "' имеет " + pages + " страниц.");
}
// Получение конкретной книги
String bookToFind = "Data Structures";
if (myBookshelf.containsKey(bookToFind)) {
int pages = myBookshelf.get(bookToFind);
System.out.println("\nНашли! '" + bookToFind + "' имеет " + pages + " страниц.");
} else {
System.out.println("\nИзвините, у нас нет '" + bookToFind + "' на нашей полке.");
}
}
}
Вывод
Когда вы выполните этот код, вы увидите вывод, подобный этому:
Книга 'Java Basics' имеет 200 страниц.
Книга 'Data Structures' имеет 350 страниц.
Книга 'Algorithms' имеет 400 страниц.
Нашли! 'Data Structures' имеет 350 страниц.
Итак, у вас есть ваш собственный цифровой шкафчик, созданный с помощью LinkedHashMap. Вы можете добавлять книги, узнавать, сколько у них страниц, и даже проверять, есть ли конкретная книга на вашей полке. Не потрясающе ли программирование?
Помните, как и с организацией настоящей полки, чем больше вы практикуетесь с использованием LinkedHashMap, тем более уверенно вы будете с ним обращаться. Не бойтесь экспериментировать и пробовать различные вещи. Счастливого кодирования, будущие эксперты Java!
Credits: Image by storyset