Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Освоение Java LinkedHashSet: особенности, методы и практические примеры

Java LinkedHashSet

В этом руководстве мы изучим класс Java LinkedHashSet и его методы с помощью примеров.

Класс LinkedHashSet из Java Collections Framework предоставляет функциональность как хеш-таблицы, так и связного списка.

Он реализует интерфейс Set.

Элементы LinkedHashSet хранятся в хеш-таблицах, подобно HashSet.

Однако связанные хеш-множества поддерживают двусвязный список внутри для всех своих элементов. Связный список определяет порядок, в котором элементы вставлены в хеш-таблицы.


Создание LinkedHashSet

Для создания linked hash set сначала импортируйте пакет java.util.LinkedHashSet.

После импорта пакета, вот как можно создавать linked hash sets в Java.

// LinkedHashSet с ёмкостью 8 и коэффициентом загрузки 0.75
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);

Здесь мы создали linked hash set с именем numbers.

Обратите внимание, часть new LinkedHashSet<>(8, 0.75). Первый параметр — capacity, второй — loadFactor.

Значения ёмкости и коэффициента загрузки по умолчанию

Можно создать linked hash set без определения ёмкости и коэффициента загрузки. Например:

// LinkedHashSet с ёмкостью и коэффициентом загрузки по умолчанию
LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();

По умолчанию:


Создание LinkedHashSet из других коллекций

Вот как создать linked hash set, содержащий все элементы других коллекций.

import java.util.LinkedHashSet;
import java.util.ArrayList;
class Main {
    public static void main(String[] args) {
        // Создание ArrayList чётных чисел
        ArrayList<Integer> evenNumbers = new ArrayList<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("ArrayList: " + evenNumbers);
        // Создание LinkedHashSet из ArrayList
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers);
        System.out.println("LinkedHashSet: " + numbers);
    }
}

Вывод

ArrayList: [2, 4] LinkedHashSet: [2, 4]

Методы LinkedHashSet

Класс LinkedHashSet предоставляет методы, позволяющие выполнять различные операции над linked hash set.


Вставка элементов в LinkedHashSet

Например:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>();
        // Использование метода add()
        evenNumber.add(2);
        evenNumber.add(4);
        evenNumber.add(6);
        System.out.println("LinkedHashSet: " + evenNumber);
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        // Использование метода addAll()
        numbers.addAll(evenNumber);
        numbers.add(5);
        System.out.println("New LinkedHashSet: " + numbers);
    }
}

Вывод

LinkedHashSet: [2, 4, 6] New LinkedHashSet: [2, 4, 6, 5]

Доступ к элементам LinkedHashSet

Для доступа к элементам linked hash set можно использовать метод iterator(). Для использования этого метода нужно импортировать пакет java.util.Iterator. Например:

import java.util.LinkedHashSet;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("LinkedHashSet: " + numbers);
        // Вызов метода iterator()
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("LinkedHashSet using Iterator: ");
        // Доступ к элементам
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Вывод

LinkedHashSet: [2, 5, 6] LinkedHashSet using Iterator: 2, 5, 6,

Примечание:


Удаление элементов из HashSet

Например:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("LinkedHashSet: " + numbers);
        // Использование метода remove()
        boolean value1 = numbers.remove(5);
        System.out.println("Is 5 removed? " + value1);
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("Are all elements removed? " + value2);
    }
}

Вывод

LinkedHashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true

Операции над множествами

Различные методы класса LinkedHashSet можно также использовать для выполнения операций над множествами.


Объединение множеств (Union)

Для выполнения объединения двух множеств можно использовать метод addAll(). Например:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("LinkedHashSet1: " + evenNumbers);
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(1);
        numbers.add(3);
        System.out.println("LinkedHashSet2: " + numbers);
        // Объединение двух множеств
        numbers.addAll(evenNumbers);
        System.out.println("Union is: " + numbers);
    }
}

Вывод

LinkedHashSet1: [2, 4] LinkedHashSet2: [1, 3] Union is: [1, 3, 2, 4]

Пересечение множеств (Intersection)

Для выполнения пересечения двух множеств можно использовать метод retainAll(). Например:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("LinkedHashSet1: " + primeNumbers);
        LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("LinkedHashSet2: " + evenNumbers);
        // Пересечение двух множеств
        evenNumbers.retainAll(primeNumbers);
        System.out.println("Intersection is: " + evenNumbers);
    }
}

Вывод

LinkedHashSet1: [2, 3] LinkedHashSet2: [2, 4] Intersection is: [2]

Разность множеств (Difference)

Для вычисления разности двух множеств можно использовать метод removeAll(). Например:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        primeNumbers.add(5);
        System.out.println("LinkedHashSet1: " + primeNumbers);
        LinkedHashSet<Integer> oddNumbers = new LinkedHashSet<>();
        oddNumbers.add(1);
        oddNumbers.add(3);
        oddNumbers.add(5);
        System.out.println("LinkedHashSet2: " + oddNumbers);
        // Разность между LinkedHashSet1 и LinkedHashSet2
        primeNumbers.removeAll(oddNumbers);
        System.out.println("Difference : " + primeNumbers);
    }
}

Вывод

LinkedHashSet1: [2, 3, 5] LinkedHashSet2: [1, 3, 5] Difference: [2]

Подмножество (Subset)

Для проверки, является ли множество подмножеством другого, можно использовать метод containsAll(). Например:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("LinkedHashSet1: " + numbers);
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("LinkedHashSet2: " + primeNumbers);
        // Проверка, является ли primeNumbers подмножеством numbers
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result);
    }
}

Вывод

LinkedHashSet1: [1, 2, 3, 4] LinkedHashSet2: [2, 3] Is LinkedHashSet2 is a subset of LinkedHashSet1? true

Другие методы LinkedHashSet

МетодОписание
clone()Создаёт копию LinkedHashSet
contains()Ищет в LinkedHashSet указанный элемент и возвращает boolean
isEmpty()Проверяет, пуст ли LinkedHashSet
size()Возвращает размер LinkedHashSet
clear()Удаляет все элементы из LinkedHashSet

Чтобы узнать больше о методах LinkedHashSet, посетите официальную документацию Java LinkedHashSet.


LinkedHashSet против HashSet

Оба LinkedHashSet и HashSet реализуют интерфейс Set. Однако между ними существуют различия.



LinkedHashSet против TreeSet

Вот основные различия между LinkedHashSet и TreeSet:

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Понимание Java Vector: использование, особенности и сравнение с ArrayList