Класс Java LinkedHashMap: Дружественное руководство для начинающих

Введение

Приветствую, будущие маги 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 у нас есть несколько параметров, которые следует учитывать:

  1. initialCapacity: Это как решение о том, какой должна быть начальная вместимость вашей полки.
  2. loadFactor: Представьте себе, что это как насколько полка может быть полной, прежде чем вам понадобится более большая.
  3. accessOrder: Это определяет, будут ли книги упорядочены по времени добавления или по частоте доступа.

Посмотрим на пример:

LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>(16, 0.75f, true);

Здесь мы говорим, что наша начальная полка может содержать 16 книг, мы рассмотрим возможность покупки большей полки, когда она будет заполнена на 75%, и мы хотим упорядочивать книги на основе частоты доступа.

Конструкторы класса

LinkedHashMap предлагает несколько способов создания нашей магической полки. Вот основные конструкторы:

  1. LinkedHashMap(): Создает пустой LinkedHashMap с 默认ными настройками.
  2. LinkedHashMap(int initialCapacity): Указывает начальную вместимость.
  3. LinkedHashMap(int initialCapacity, float loadFactor): Указывает как начальную вместимость, так и коэффициент нагрузки.
  4. LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder): Указывает все три параметра.
  5. 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