Рубрики
Без рубрики

Набор Java – Набор на Java

Набор Java-это набор элементов (или объектов), который не содержит повторяющихся элементов. Набор Java – это интерфейс, который расширяет интерфейс коллекции. В отличие от

Автор оригинала: Pankaj Kumar.

Набор Java-это набор элементов (или объектов), который не содержит повторяющихся элементов. Набор Java – это интерфейс, который расширяет интерфейс коллекции. В отличие от списка, набор Java НЕ является упорядоченной коллекцией, его элементы НЕ имеют определенного порядка. Набор Java НЕ обеспечивает контроль над положением, в которое вы можете вставить элемент. Вы не можете получить доступ к элементам по их индексу, а также к элементам поиска в списке.

Набор Java

В этом разделе мы обсудим некоторые важные моменты, касающиеся набора Java:

  • Интерфейс набора Java является членом платформы коллекций Java.
  • В отличие от списка, Set НЕ позволяет добавлять повторяющиеся элементы.
  • Набор позволяет добавлять не более одного нулевого элемента.
  • Интерфейс Set получил один метод по умолчанию в Java 8: spliterator.
  • В отличие от списка и массивов, Set НЕ поддерживает индексы или позиции своих элементов.
  • Набор поддерживает дженерики, и мы должны использовать его, когда это возможно. Использование универсалий с набором позволит избежать исключения ClassCastException во время выполнения.
  • Мы можем использовать реализации интерфейса Set для поддержания уникальных элементов.

Диаграмма классов набора Java

Интерфейс набора Java расширяет интерфейс коллекции. Интерфейс сбора расширяет итерационный интерфейс. Некоторые из часто используемых классов реализации набора-это HashSet, LinkedHashSet, TreeSet, CopyOnWriteArraySet и ConcurrentSkipListSet. Абстрактный набор обеспечивает скелетную реализацию интерфейса набора для уменьшения усилий при реализации набора.

Методы набора Java

В этом разделе мы обсудим некоторые полезные методы набора Java:

  1. int size(): для получения количества элементов в наборе.
  2. логическое значение isEmpty(): для проверки, является ли набор пустым или нет.
  3. логическое значение содержит(объект o): Возвращает значение true, если этот набор содержит указанный элемент.
  4. Итератор итератор(): Возвращает итератор по элементам в этом наборе. Элементы возвращаются без определенного порядка.
  5. Объект[] toArray(): Возвращает массив, содержащий все элементы в этом наборе. Если этот набор дает какие-либо гарантии относительно того, в каком порядке его элементы возвращаются итератором, этот метод должен возвращать элементы в том же порядке.
  6. логическое добавление(E e): Добавляет указанный элемент в этот набор, если он еще не присутствует (необязательная операция).
  7. логическое удаление(Объект o): Удаляет указанный элемент из этого набора, если он присутствует (необязательная операция).
  8. логическое удаление всего(коллекция c): Удаляет из этого набора все его элементы, содержащиеся в указанной коллекции (необязательная операция).
  9. логическое сохранение(коллекция c): Сохраняет только элементы в этом наборе, содержащиеся в указанной коллекции (необязательная операция).
  10. очистить пустоту(): Удаляет все элементы из набора.
  11. Итератор итератор(): Возвращает итератор по элементам в этом наборе.

Массив Java для установки

В отличие от списка, мы не можем напрямую преобразовать набор Java в массив, поскольку он НЕ реализован с использованием массива. Поэтому мы не можем использовать класс Arrays для получения представления массива как заданного. Мы можем использовать другой подход. Мы можем преобразовать массив в список с помощью метода Arrays.asList (), а затем использовать его для создания набора. Используя этот подход, мы можем преобразовать массив Java в набор двумя способами. Давайте обсудим их один за другим на одном простом примере.

Подход-1 В этом подходе сначала нам нужно создать список с использованием данного массива и использовать его для создания набора, как показано ниже.

import java.util.*;

public class ArrayToSet {
   public static void main(String[] args) {
		
	String[] vowels = {"a","e","i","o","u"};
		
	Set vowelsSet = new HashSet>(Arrays.asList(vowels));
	System.out.println(vowelsSet);
	
	/**
	 * Unlike List, Set is NOt backed by array, 
	 * so we can do structural modification without any issues.
	 */
	vowelsSet.remove("e");
	System.out.println(vowelsSet);
	vowelsSet.clear();
	System.out.println(vowelsSet);
   }
}

Подход-2 В этом подходе мы НЕ используем промежуточный список для создания набора из массива. Сначала создайте пустой хэш-набор, затем используйте Collections.addAll() для копирования элементов массива в данный набор, как показано ниже.

import java.util.*;

public class ArrayToSet2 {
   public static void main(String[] args) {
		
	String[] vowels = {"a","e","i","o","u"};
		
	Set vowelsSet = new HashSet<>();
	Collections.addAll(vowelsSet, vowels); 
	System.out.println(vowelsSet);

	/** 
	 * Unlike List, Set is NOt backed by array, 
	 * so we can do structural modification without any issues.
	 */
	vowelsSet.remove("e");
	System.out.println(vowelsSet);
	vowelsSet.clear();
	System.out.println(vowelsSet);
   }
}

Вывод:- Когда мы запустим две вышеуказанные программы, мы получим тот же вывод, что и показано ниже.

[a, e, u, i, o]
[a, u, i, o]
[]

Java Установлен в массив

В этом разделе мы напишем программу для преобразования набора строк в массив строк с помощью метода Set.toArray (), как показано ниже.

import java.util.*;

public class SetToArray {
   public static void main(String[] args) {
	Set();

	// add example
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	//convert Set to Array
	String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
	System.out.println(Arrays.toString(strArray)); 
   }
}

Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод, как показано ниже.

[a, e, u, i, o]

Сортировка наборов Java

Как мы знаем, Set (HashSet) НЕ поддерживает прямую сортировку элементов. Он хранит и отображает свои элементы в случайном порядке.

Тем не менее, у нас есть несколько подходов к сортировке его элементов, как показано ниже:

import java.util.*;

public class SetSortingExample {

	public static void main(String[] args) {
		Set intsSet = new HashSet<>();
		Random random = new Random();
		for (int i = 0; i  {return (o2-o1);});
		System.out.println("Reverse Sorting: " + intsList2);

		// Approach-3
		Set sortedSet = new TreeSet<>(intsSet);
		System.out.println("Sorted Set: " + sortedSet);
	}
}

Вывод:- Когда мы запустим вышеуказанную программу, мы увидим следующий вывод.

[560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Natural Sorting: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Before Sorting: [560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Reverse Sorting: [864, 657, 589, 560, 555, 176, 135, 123, 103, 40]
Sorted Set: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]

Java Устанавливает Общие Операции

Наиболее распространенными операциями, выполняемыми в наборе Java, являются добавление, добавление, очистка, размер и т.д. Ниже приведен простой пример набора Java, показывающий общее использование метода.

import java.util.*;

public class SetCommonOperations 
{
   public static void main(String args[]) 
   {
	Set vowels= new HashSet<>();
		
	//add example
	vowels.add("A");
	vowels.add("E");
	vowels.add("I");

	//We cannot insert elements based on index to a Set
	System.out.println(vowels);
		
	Set set = new HashSet<>();
	set.add("O");
	set.add("U");
	
	//appending set elements to letters
	vowels.addAll(set);
	System.out.println(vowels);
	
	//clear example to empty the set
	set.clear();
		
	//size example
	System.out.println("letters set size = " + vowels.size());
		
	vowels.clear();
	vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
	System.out.println("Given set contains E element or not? = " + vowels.contains("E"));
		
   }
}

Выход:-

[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = true

Итератор набора Java

Ниже приведен простой пример, показывающий, как выполнить итерацию по набору Java.

import java.util.*;

public class SetIteratorExample
{
   public static void main(String[] args) 
   {

	Set set = new HashSet<>();
	for(int i=0; i<5; i++) 
		set.add(i);
		
	Iterator iterator = set.iterator();
	
	//simple iteration
	while(iterator.hasNext()){
		int i = (int) iterator.next();
		System.out.print(i + ", ");
	}
	System.out.println("\n" + set);
	
	//modification of set using iterator
	iterator = set.iterator();
	while(iterator.hasNext()){
		int x = (int) iterator.next();
		if(x%2 ==0) iterator.remove();
	}
	System.out.println(set);
		
	//changing set structure while iterating
	iterator = set.iterator();
	while(iterator.hasNext()){
                //ConcurrentModificationException here
		int x = (int) iterator.next(); 
		if(x==1) set.add(10);
	}
   }
}

Java Настроена на потоковую передачу

Ниже приведен простой пример, показывающий, как преобразовать набор Java в поток и выполнить некоторые операции в соответствии с нашими требованиями.

import java.util.*;

public class SetToStream {

   public static void main(String[] args) {
	Set vowelsSet = new HashSet<>();
	// add example
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	//convert set to stream
	vowelsSet.stream().forEach(System.out::println);
   }
}

Выход:-

a
e
u
i
o

Набор Java SE 9

В выпуске Java SE 9 корпорация Oracle собирается добавить некоторые полезные служебные методы для настройки интерфейса. Лучше понять их на нескольких простых и полезных примерах.

Пожалуйста, ознакомьтесь с моим руководством по “Java SE 9: Набор заводских методов”, чтобы изучить их.

Это все краткое описание съемочной площадки на Java. Я надеюсь, что эти примеры наборов Java помогут вам начать работу с программированием набора наборов.

Спасибо, что прочитали мои учебные пособия. Пожалуйста, напишите мне комментарий, если вам нравятся мои учебные пособия или у вас есть какие-либо вопросы или предложения или какие-либо ошибки типа.