NavigableSet в Java
В Java NavigableSet е подтип на СортиранНабор интерфейс. Позволява ни да извършваме различни операции като получаване на най-близките съвпадения за даден елемент в низходящ ред итерация и други. Той предоставя методи за навигиране през елементите в комплекта.
Например Интерфейсът NavigableSet ни позволява да навигираме през набора както във възходящ, така и в низходящ ред, за разлика от SortedSet, който поддържа само възходящ ред. Класовете, които имплементират интерфейса NavigableSet са TreeSet и ConcurrentSkipListSet
- NavigableSet разширява SortedSet и по този начин предоставя методи като first() last() headSet() tailSet() и т.н.
- Тя ви позволява да навигирате в двете посоки във възходящ и низходящ ред
- Най-често срещаната реализация на NavigableSet е TreeSet.
Пример: Този пример демонстрира създаване на NavigableSet с помощта на TreeSet и добавяне на елементи към него, което автоматично ги сортира във възходящ ред.
Java // Java program to demonstrates // the working of NavigableSet import java.util.* ; public class Geeks { public static void main ( String [] args ) { NavigableSet < Integer > ns = new TreeSet <> (); // Add elements to the set ns . add ( 10 ); ns . add ( 20 ); ns . add ( 30 ); ns . add ( 40 ); ns . add ( 50 ); System . out . println ( 'Navigable Set: ' + ns ); } }
Изход
Navigable Set: [10 20 30 40 50]
Диаграмата по-долу демонстрира структурата на наследяване в рамката за събиране на Java, свързана с набори.
TreeSet е клас, който имплементира NavigableSet което от своя страна разширява SortedSet което разширява Комплект .
Декларация на NavigableSet
В Java декларацията на NavigableSet може да бъде декларирана като:
NavigableSet
setName;
Забележка: ' Type' е типът на елемента в набора (напр. цял низ и т.н.), а setName е името на променливата.
Създаване на NavigableSet обекти
Не можем да създадем NavigableSet директно, тъй като това е интерфейс. Вместо това използваме клас като TreeSet който го прилага. С помощта на генерики можем да дефинираме типа обекти, които наборът ще съхранява. Този тип безопасен набор може да се дефинира като:
NavigableSet
set = нов TreeSet ();
Пример: Този пример демонстрира как да използвате различни методи на NavigableSet като descedingSet() tailSet() lower() pollFirst() и pollLast() за манипулиране и навигиране в сортиран набор както в нормален, така и в обратен ред.
Java // Java Program to demostrates the // working of various methods of NavigableSet import java.util.NavigableSet ; import java.util.TreeSet ; public class Geeks { public static void main ( String [] args ) { NavigableSet < Integer > ns = new TreeSet <> (); ns . add ( 0 ); ns . add ( 1 ); ns . add ( 2 ); ns . add ( 3 ); ns . add ( 4 ); ns . add ( 5 ); ns . add ( 6 ); // Get a reverse view of the navigable set NavigableSet < Integer > revNs = ns . descendingSet (); // Print the normal and reverse views System . out . println ( 'Normal order: ' + ns ); System . out . println ( 'Reverse order: ' + revNs ); NavigableSet < Integer > t = ns . tailSet ( 3 true ); System . out . println ( '3 or more: ' + t ); System . out . println ( 'lower(3): ' + ns . lower ( 3 )); System . out . println ( 'floor(3): ' + ns . floor ( 3 )); System . out . println ( 'higher(3): ' + ns . higher ( 3 )); System . out . println ( 'ceiling(3): ' + ns . ceiling ( 3 )); System . out . println ( 'pollFirst(): ' + ns . pollFirst ()); System . out . println ( 'Navigable Set: ' + ns ); System . out . println ( 'pollLast(): ' + ns . pollLast ()); System . out . println ( 'Navigable Set: ' + ns ); System . out . println ( 'pollFirst(): ' + ns . pollFirst ()); System . out . println ( 'Navigable Set: ' + ns ); System . out . println ( 'pollFirst(): ' + ns . pollFirst ()); System . out . println ( 'Navigable Set: ' + ns ); System . out . println ( 'pollFirst(): ' + ns . pollFirst ()); System . out . println ( 'Navigable Set: ' + ns ); System . out . println ( 'pollFirst(): ' + ns . pollFirst ()); System . out . println ( 'pollLast(): ' + ns . pollLast ()); } }
Изход:
Извършване на различни операции върху NavigableSet
1. Добавяне на елементи: Можем да използваме добави () метод за вмъкване на елементи в NavigableSet. Елементите се съхраняват в сортирания ред, не се допускат дубликати и нулевите стойности също не се приемат от NavigableSet.
Пример: Този пример демонстрира добавяне на елементи към NavigableSet с помощта на add(), където дубликатите се игнорират и елементите се сортират във възходящ ред.
Java // Java Program to demonstrates the working of add() import java.util.* ; import java.io.* ; class Geeks { public static void main ( String [] args ) { NavigableSet < String > ts = new TreeSet < String > (); // Elements are added using add() method ts . add ( 'A' ); ts . add ( 'B' ); ts . add ( 'C' ); ts . add ( 'A' ); System . out . println ( 'NavigableSet: ' + ts ); } }
Изход
NavigableSet: [A B C]
2. Достъп до елементи: След като добавим елементите, ако искаме да получим достъп до елементите, можем да използваме вградени методи като съдържа () първи() последно() и т.н.
Пример: Този пример демонстрира добавяне на елементи към NavigableSet, проверка за съществуването на елемент и извличане на първия и последния елемент.
Java // Java program to demonstrates the // working of contains() first() and last() method import java.util.* ; import java.io.* ; class Geeks { public static void main ( String [] args ) { NavigableSet < String > ts = new TreeSet < String > (); // Elements are added using add() method ts . add ( 'A' ); ts . add ( 'B' ); ts . add ( 'C' ); ts . add ( 'A' ); System . out . println ( 'NavigableSet: ' + ts ); String s = 'D' ; // Check if the above string exists in // the NavigableSet or not System . out . println ( 'D exists in the NavigableSet?: ' + ts . contains ( s )); // Print the first element in // the NavigableSet System . out . println ( 'First Element of NavigableSet: ' + ts . first ()); // Print the last element in // the NavigableSet System . out . println ( 'Last Element of NavigableSet: ' + ts . last ()); } }
Изход
NavigableSet: [A B C] D exists in the NavigableSet?: false First Element of NavigableSet: A Last Element of NavigableSet: C
3. Премахване на елементи: Стойностите могат да бъдат премахнати от NavigableSet с помощта на премахване () pollFirst() pollLast() .
Пример: Този пример демонстрира премахване на елементи от NavigableSet.
Java // Java Program to demonstrates the working of remove() // pollFirst() and pollLast() method import java.io.* ; import java.util.* ; class Geeks { public static void main ( String [] args ) { NavigableSet < String > ts = new TreeSet < String > (); // Elements are added using add() method ts . add ( 'A' ); ts . add ( 'B' ); ts . add ( 'C' ); ts . add ( 'B' ); ts . add ( 'D' ); ts . add ( 'E' ); System . out . println ( 'NavigableSet: ' + ts ); // Removing the element b ts . remove ( 'B' ); System . out . println ( 'After removing element ' + ts ); // Remove the First element of TreeSet ts . pollFirst (); System . out . println ( 'After the removal of First Element ' + ts ); // Remove the Last element of TreeSet ts . pollLast (); System . out . println ( 'After the removal of Last Element ' + ts ); } }
Изход
NavigableSet: [A B C D E] After removing element [A C D E] After the removal of First Element [C D E] After the removal of Last Element [C D]
4. Повтарящи се елементи: Има различни начини за итерация през NavigableSet. Най-известният е да използвате подобрен for цикъл.
Пример: Този пример демонстрира добавяне на елементи към NavigableSet и итерация през него във възходящ ред.
Java // Java Program to iterate through NavigableSet import java.util.* ; import java.io.* ; class Geeks { public static void main ( String [] args ) { NavigableSet < String > ts = new TreeSet < String > (); // Elements are added using add() method ts . add ( 'C' ); ts . add ( 'D' ); ts . add ( 'E' ); ts . add ( 'A' ); ts . add ( 'B' ); ts . add ( 'Z' ); // Iterating though the NavigableSet for ( String i : ts ) System . out . print ( i + ' ' ); } }
Изход
A B C D E Z
Методи
По-долу са методите, налични в интерфейса NavigableSet.
| Методи | Описание |
|---|---|
| таван (E e) | Връща най-малкия елемент в този набор, по-голям или равен на дадения елемент или нула, ако няма такъв елемент. |
| низходящ итератор() | Връща итератор върху елементите в този набор в низходящ ред. |
| descendingSet() | Връща изглед в обратен ред на елементите, съдържащи се в този набор. |
| етаж (E e) | Връща най-големия елемент в този набор, по-малък или равен на дадения елемент или нула, ако няма такъв елемент. |
| Слушалки (E toElement) | Връща изглед на частта от този набор, чиито елементи са строго по-малко от toElement. |
| HeadSet (E toElement boolean включително) | Връща изглед на частта от този набор, чиито елементи са по-малки от (или равни, ако inclusive е true) toElement. |
| по-висок (E e) | Връща най-малкия елемент в този набор, строго по-голям от дадения елемент или нула, ако няма такъв елемент. |
| итератор() | Връща итератор върху елементите в този набор във възходящ ред. |
| по-нисък (E e) | Връща най-големия елемент в този набор строго по-малък от дадения елемент или нула, ако няма такъв елемент. |
| pollFirst() | Извлича и премахва първия (най-ниския) елемент или връща null, ако този набор е празен. |
| pollLast() | Извлича и премахва последния (най-висок) елемент или връща null, ако този набор е празен. |
| subSet(E fromElement boolean fromInclusive E toElement boolean toInclusive) | Връща изглед на частта от този набор, чиито елементи варират от fromElement до toElement. |
| подмножество (E от Елемент E до Елемент) | Връща изглед на частта от този набор, чиито елементи варират от fromElement inclusive до toElement exclusive. |
| tailSet(E fromElement) | Връща изглед на частта от този набор, чиито елементи са по-големи или равни на fromElement. |
| tailSet(E fromElement boolean inclusive) | Връща изглед на частта от този набор, чиито елементи са по-големи от (или равни, ако inclusive е true) fromElement. |
Методи, наследени от интерфейс java.util.SortedSet
| Метод | Описание |
|---|---|
| компаратор() | Този метод връща компаратора, използван за подреждане на елементите в този набор или нула, ако този набор използва естествения ред на своите елементи. |
| първи() | Този метод връща първия (най-ниския) елемент, присъстващ в този набор. |
| последно() | Този метод връща последния (най-висок) елемент, присъстващ в набора. |
| сплитератор() | Създава Spliterator над елементите в този сортиран набор. |
Методи, наследени от интерфейс java.util.Set
| Метод | Описание |
|---|---|
| добавяне (елемент) | Този метод се използва за добавяне на определен елемент към набора. Функцията добавя елемента само ако посоченият елемент вече не присъства в набора, в противен случай функцията връща False, ако елементът вече присъства в набора. |
| addAll(колекция) | Този метод се използва за добавяне на всички елементи от споменатата колекция към съществуващия набор. Елементите се добавят на случаен принцип, без да се спазва определен ред. |
| ясно() | Този метод се използва за премахване на всички елементи от набора, но не и за изтриване на набора. Справката за комплекта все още съществува. |
| съдържа (елемент) | Този метод се използва за проверка дали определен елемент присъства в набора или не. |
| съдържа Всички (колекция) | Този метод се използва за проверка дали наборът съдържа всички елементи, присъстващи в дадената колекция или не. Този метод връща true, ако наборът съдържа всички елементи и връща false, ако някой от елементите липсва. |
| равно на () | Сравнява посочения обект с този набор за равенство. |
| hashCode() | Този метод се използва за получаване на стойността на hashCode за този екземпляр на Set. Той връща целочислена стойност, която е стойността на hashCode за този екземпляр на Set. |
| isEmpty() | Този метод се използва за проверка дали NavigableSet е празен или не. |
| премахване (елемент) | Този метод се използва за премахване на даден елемент от набора. Този метод връща True, ако посоченият елемент присъства в Set, в противен случай връща False. |
| премахване на всички (колекция) | Този метод се използва за премахване на всички елементи от колекцията, които присъстват в набора. Този метод връща true, ако този набор се промени в резултат на извикването. |
| retainAll(колекция) | Този метод се използва за запазване на всички елементи от набора, които са споменати в дадената колекция. Този метод връща true, ако този набор се промени в резултат на извикването. |
| размер () | Този метод се използва за получаване на размера на комплекта. Това връща цяло число, което означава броя на елементите. |
| toArray() | Този метод се използва за формиране на масив от същите елементи като този на Set. |
| toArray(T[] a) | Връща масив, съдържащ всички елементи в този набор; типът по време на изпълнение на върнатия масив е този на посочения масив. |
Методи, декларирани в интерфейс java.util.Collection
| Метод | Описание |
|---|---|
| parallelStream() | Връща евентуално паралелен поток с тази колекция като негов източник. |
| removeIf(Предикат super E>филтър) | Премахва всички елементи от тази колекция, които отговарят на дадения предикат. |
| поток () | Връща последователен поток с тази колекция като негов източник. |
| toArray?(IntFunction | Връща масив, съдържащ всички елементи в тази колекция, като използва предоставената генераторна функция за разпределяне на върнатия масив. |
Методи, декларирани в интерфейс java.lang.Iterable
| Метод | Описание |
|---|---|
| forEach(Потребител super T>действие) | Извършва даденото действие за всеки елемент от Iterable, докато всички елементи бъдат обработени или действието хвърли изключение. |