set interface java
Tento výukový program sady Java vysvětluje vše o rozhraní sady v Javě. Pokrývá to, jak procházet sadou, nastavovat metody, implementaci, nastavovat na seznam atd .:
Set in Java is an interface that is a part of the Java Collection Framework and implements the Collection interface. Kolekce sad poskytuje funkce matematické sady.
Sada může být definována jako kolekce neuspořádaných objektů a nemůže obsahovat duplicitní hodnoty. Protože sada rozhraní dědí rozhraní Collection, implementuje všechny metody rozhraní Collection.
=> Podívejte se na průvodce Perfect Java Training Guide zde.
Co se naučíte:
Sada Java
Nastavené rozhraní je implementováno třídami a rozhraními, jak je znázorněno na následujícím diagramu.
Jak je znázorněno ve výše uvedeném diagramu, rozhraní Set dědí třídy, HashSet, TreeSet, LinkedHashSet a EnumSet. Rozhraní SortedSet a NavigableSet také implementují rozhraní Set.
Níže jsou uvedeny některé důležité vlastnosti rozhraní Set:
- Nastavené rozhraní je součástí Java Collections Framework.
- Nastavené rozhraní umožňuje jedinečné hodnoty.
- Může mít maximálně jednu nulovou hodnotu.
- Java 8 poskytuje výchozí metodu pro nastavené rozhraní - Spliterator.
- Nastavené rozhraní nepodporuje indexy prvků.
- Nastavené rozhraní podporuje generika.
Jak vytvořit sadu?
Nastavené rozhraní v Javě je součástí balíčku java.util. Abychom do programu zahrnuli nastavené rozhraní, musíme použít jeden z následujících příkazů importu.
import java.util.*;
nebo
import java.util.Set;
Jakmile je funkce sady rozhraní zahrnuta do programu, můžeme vytvořit sadu v Javě pomocí libovolné třídy tříd (tříd, které implementují rozhraní sady), jak je uvedeno níže.
Set colors_Set = new HashSet();
Poté můžeme tento objekt sady inicializovat přidáním několika prvků k němu pomocí metody add.
colors_Set.add(“Red”); colors_Set.add(“Green”); colors_Set.add(“Blue”);
Příklad v Javě
Implementujme jednoduchý příklad v Javě, abychom předvedli rozhraní Set.
import java.util.*; public class Main { public static void main(String() args) { // Set demo with HashSet Set Colors_Set = new HashSet(); Colors_Set.add('Red'); Colors_Set.add('Green'); Colors_Set.add('Blue'); Colors_Set.add('Cyan'); Colors_Set.add('Magenta'); //print set contents System.out.print('Set contents:'); System.out.println(Colors_Set); // Set demo with TreeSet System.out.print('
Sorted Set after converting to TreeSet:'); Set tree_Set = new TreeSet(Colors_Set); System.out.println(tree_Set); } }
Výstup:
Obsah sady: (Červená, Azurová, Modrá, Purpurová, Zelená)
Seřazená sada po převodu na TreeSet: (modrá, azurová, zelená, purpurová, červená)
Iterovat skrz Set v Javě
Ke každému z prvků sady můžeme přistupovat pomocí různých přístupů. O těchto přístupech budeme diskutovat níže.
Pomocí Iterátoru
Můžeme definovat iterátor pro procházení nastaveným objektem. Pomocí tohoto iterátoru můžeme přistupovat ke každému prvku v sadě a zpracovávat jej.
Následující program Java předvádí iteraci sadou a tiskne prvky sady.
import java.util.*; import java.util.HashSet; public class Main { public static void main(String args()) { // Create a HashSet object and initialize it Set cities_Set = new HashSet(); cities_Set.add('Bangaluru'); cities_Set.add('Pune'); cities_Set.add('Hyderabad'); cities_Set.add('Kolkata'); // Print the set contents System.out.println('HashSet: ' + cities_Set); // Create an iterator for the cities_Set Iterator iter = cities_Set.iterator(); // print the set contents using iterator System.out.println('Values using Iterator: '); while (iter.hasNext()) { System.out.print(iter.next()+ ' '); } } }
Výstup:
HashSet: (Bangaluru, Pune, Kolkata, Hyderabad)
Hodnoty používající Iterator:
Bangalore Pune Kolkata Hyderabad
Použití smyčky For-each
Můžeme také použít smyčku pro každou pro přístup k prvkům v sadě. Tady procházíme množinou ve smyčce.
Následující program to ukazuje.
import java.util.*; import java.util.HashSet; public class Main { public static void main(String args()) { // Create a HashSet object and initialize it Set cities_Set = new HashSet(); cities_Set.add('Bangaluru'); cities_Set.add('Pune'); cities_Set.add('Hyderabad'); cities_Set.add('Kolkata'); // Print the set contents System.out.println('HashSet: ' + cities_Set); System.out.println('
Set contents using forEach loop:'); // print the set contents using forEach loop for(String val : cities_Set) { System.out.print(val + ' '); } } }
Výstup:
HashSet: (Bangaluru, Pune, Kolkata, Hyderabad)
Nastavit obsah pomocí smyčky forEach:
Bangalore Pune Kolkata Hyderabad
Pomocí rozhraní Java 8 Stream API
Můžeme také iterovat a přistupovat k prvkům sady pomocí Java 8 stream API. V tomto generujeme proud ze sady a poté iterujeme proudem pomocí smyčky forEach.
Níže uvedený program Java demonstruje iteraci sady pomocí rozhraní API Java 8 stream.
import java.util.*; import java.util.HashSet; import java.util.stream.*; public class Main { public static void main(String args()) { // Create a HashSet object and initialize it Set cities_Set = new HashSet(); cities_Set.add('Bangaluru'); cities_Set.add('Pune'); cities_Set.add('Hyderabad'); cities_Set.add('Kolkata'); // Print the set contents System.out.println('HashSet: ' + cities_Set); System.out.println('
Set contents using Java 8 stream API:'); //generate a stream from set Stream stream = cities_Set.stream(); //iterate the stream using forEach loop to print the elements stream.forEach((element) -> { System.out.print(element + ' '); }); } }
Výstup:
HashSet: (Bangaluru, Pune, Kolkata, Hyderabad)
Nastavit obsah pomocí Java 8 stream API:
Bangalore Pune Kolkata Hyderabad
Set Methods API
Níže jsou uvedeny metody podporované rozhraním Set. Tyto metody spolu s dalšími operacemi provádějí základní operace, jako je přidání, odebrání, obsahuje atd.
seznam falešných e-mailových adres, které se mají použít
Metoda | Metoda Prototyp | Popis |
---|---|---|
je prázdný | boolean isEmpty () | Zkontroluje, zda je sada prázdná |
přidat | booleovský doplněk (E e) | Přidá prvek e do sady, pokud není v sadě přítomen |
přidat vše | boolean addAll (kolekce c) | Přidá prvek kolekce c do sady. |
odstranit | boolean remove (Objekt o) | Odstraní daný prvek o ze sady. |
odebrat všechny | boolean removeAll (kolekce c) | Odebere ze sady prvky přítomné v dané kolekci c. |
obsahuje | boolean obsahuje (Objekt o) | Zkontroluje, zda je daný prvek o v sadě. Vrátí true, pokud ano. |
obsahuje vše | boolean containsAll (kolekce c) | Zkontroluje, zda sada obsahuje všechny prvky v určené kolekci; Vrátí true, pokud ano. |
zachovat vše | boolean keepAll (kolekce c) | Sada zachovává všechny prvky v dané kolekci c |
Průhledná | prázdnota clear () | Vymaže sadu odstraněním všech prvků ze sady |
iterátor | Iterátor iterátor () | Slouží k získání iterátoru pro sadu |
toArray | Objekt () toArray () | Převede sadu na reprezentaci pole, která obsahuje všechny prvky v sadě. |
velikost | int velikost () | Vrátí celkový počet prvků nebo velikost sady. |
hashCode | hashCode () | Vrátí hashCode sady. |
Nyní pojďme implementovat některé z metod, které jsme diskutovali výše v programu Java. Uvidíme také následující konkrétní operace, které zahrnují dvě sady.
Nastavit implementaci v Javě
Průsečík: Zachováváme společné hodnoty mezi těmito dvěma sadami. Provedeme křižovatku pomocí zachovat vše metoda.
Unie: Zde kombinujeme dvě sady. To se provádí pomocí přidat vše metoda.
Rozdíl: Tato operace odebere jednu sadu od druhé. Tato operace se provádí pomocí odebrat všechny metoda.
import java.util.*; public class Main { public static void main(String args()) { //declare a set class (HashSet) Set numSet = new HashSet(); //add an element => add numSet.add(13); //add a list to the set using addAll method numSet.addAll(Arrays.asList(new Integer() {1,6,4,7,3,9,8,2,12,11,20})); //print the set System.out.println('Original Set (numSet):' + numSet); //size() System.out.println('
numSet Size:' + numSet.size()); //create a new set class and initialize it with list elements Set oddSet = new HashSet(); oddSet.addAll(Arrays.asList(new Integer() {1, 3, 7, 5, 9})); //print the set System.out.println('
OddSet contents:' + oddSet); //contains () System.out.println('
numSet contains element 2:' + numSet.contains(3)); //containsAll () System.out.println('
numSet contains collection oddset:' + numSet.containsAll(oddSet)); // retainAll () => intersection Set set_intersection = new HashSet(numSet); set_intersection.retainAll(oddSet); System.out.print('
Intersection of the numSet & oddSet:'); System.out.println(set_intersection); // removeAll () => difference Set set_difference = new HashSet(numSet); set_difference.removeAll(oddSet); System.out.print('Difference of the numSet & oddSet:'); System.out.println(set_difference); // addAll () => union Set set_union = new HashSet(numSet); set_union.addAll(oddSet); System.out.print('Union of the numSet & oddSet:'); System.out.println(set_union); } }
Výstup:
Původní sada (numSet): (1, 2, 3, 4, 20, 6, 7, 8, 9, 11, 12, 13)
numSet Velikost: 12
OddSet obsah: (1, 3, 5, 7, 9)
numSet obsahuje prvek 2: true
numSet obsahuje kolekci oddset: false
Průsečík numSet & oddSet: (1, 3, 7, 9)
Rozdíl numSet & oddSet: (2, 4, 6, 8, 11, 12, 13, 20)
Union of the numSet & oddSet: (1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 20)
Set to Array
Metodu ‚toArray 'jsme viděli ve výše uvedené části o metodách. Tuto metodu toArray lze použít k převodu sady na pole.
Níže uvedený program Java převádí sadu na pole.
import java.util.*; public class Main { public static void main(String() args) { //declare a set class (HashSet) Set setOfColors= new HashSet(); // add data to HashSet setOfColors.add('Red'); setOfColors.add('Green'); setOfColors.add('Blue'); setOfColors.add('Cyan'); setOfColors.add('Magenta'); //print the set System.out.println('The set contents:' + setOfColors); //convert Set to Array using toArray () method String colors_Array() = setOfColors.toArray(new String(setOfColors.size())); //print the Array System.out.println('Set converted to Array:' + Arrays.toString(colors_Array)); } }
Výstup:
Obsah sady: (Červená, Azurová, Modrá, Purpurová, Zelená)
Sada převedena na pole: (červená, azurová, modrá, purpurová, zelená)
Pole k nastavení
Chcete-li převést pole na sadu v Javě, můžeme postupovat dvěma způsoby, jak je znázorněno níže.
# 1) Pole můžeme převést na seznam pomocí metody asList a poté tento seznam předat jako argument konstruktoru množiny. To má za následek vytvoření nastaveného objektu s prvky pole.
#dva) Alternativně můžeme použít metodu Collections.addAll ke zkopírování prvků pole do nastaveného objektu.
Níže uvedený program Java implementuje oba tyto přístupy k převodu pole na sadu.
import java.util.*; public class Main { public static void main(String() args) { //declare an array Integer() numArray = {10,50,40,20,60,30,80,70}; System.out.println('The input array:' + Arrays.toString(numArray)); //Approach 1: create a set class and provide array //converted to list as constructor arg Set numSet = new HashSet(Arrays.asList(numArray)); //print the set System.out.println('
Array converted to set through asList:' + numSet); //create another set Set intSet = new HashSet(); //Approach 2: use Collections.addAll method to copy array elements to the set Collections.addAll(intSet, numArray); //print the set System.out.println('
Array converted to set using Collections.addAll:' + intSet); } }
Výstup:
Vstupní pole: (10, 50, 40, 20, 60, 30, 80, 70)
Pole převedeno na nastavení prostřednictvím asList: (80, 50, 20, 70, 40, 10, 60, 30)
Pole převedeno na sadu pomocí Collections.addAll: (80, 50, 20, 70, 40, 10, 60, 30)
Nastavit na seznam
K převodu sady na seznam v Javě můžeme použít metodu „addAll“ třídy seznamu. Tato metoda zkopíruje obsah sady nebo jakékoli kolekce poskytnuté jako argument do seznamu, který vyvolá metodu addAll.
Níže uvedený program Java převádí sadu na ArrayList.
import java.util.*; public class Main { public static void main(String() args) { //declare a set class and initialize it Set strSet= new HashSet(); strSet.add('one'); strSet.add('two'); strSet.add('three'); strSet.add('four'); strSet.add('five'); //print the set System.out.println('The set contents: ' + strSet); //declare an ArrayList List strList = new ArrayList(); //using addAll method,copy set elements to ArrayList strList.addAll(strSet); //print the ArrayList System.out.println('The ArrayList from set : ' + strList); } }
Výstup:
Obsah sady: (čtyři, jedna, dva, tři, pět)
ArrayList ze sady: (čtyři, jedna, dva, tři, pět)
Seznam k nastavení
Chcete-li převést daný seznam jako ArrayList na sadu v Javě, předáme objekt seznamu jako argument konstruktoru sady.
Následující program Java implementuje tuto konverzi.
import java.util.*; public class Main { public static void main(String() args) { //declare an ArrayList and initialize it List strList = new ArrayList(); strList.add('one'); strList.add('two'); strList.add('three'); strList.add('four'); strList.add('five'); //print the ArrayList System.out.println('The ArrayList: ' + strList); //declare a set class with ArrayList as argument to the constructor Set strSet= new HashSet(strList); //print the set System.out.println('The Set obtained from ArrayList: ' + strSet); } }
Výstup:
ArrayList: (jedna, dva, tři, čtyři, pět)
Sada získaná z ArrayList: (čtyři, jedna, dva, tři, pět)
Seřadit sadu v Javě
Kolekce Set v Javě nemá přímou metodu řazení. Musíme tedy dodržet některé nepřímé přístupy pro třídění nebo řazení obsahu nastaveného objektu. Existuje však výjimka v případě, že nastaveným objektem je TreeSet.
Objekt TreeSet ve výchozím nastavení poskytuje uspořádanou sadu. Proto pokud máme zájem o uspořádanou sadu prvků, měli bychom jít na TreeSet. Pro HashSet nebo objekty LinkedHashSet, můžeme sadu převést na Seznam. Třídit seznam pomocí metody Collections.sort () a poté seznam převést zpět na sadu.
Tento přístup je uveden v níže uvedeném programu Java.
import java.util.Arrays; import java.util.Collections; import java.util.*; public class Main{ public static void main(String() args) { //Declare a set and initialize it with unsorted list HashSet evenNumSet = new LinkedHashSet( Arrays.asList(4,8,6,2,12,10,62,40,36) ); //print the unsorted set System.out.println('Unsorted Set: ' + evenNumSet); //convert set to list List numList = new ArrayList(evenNumSet); //Sort the list using Collections.sort () method Collections.sort(numList); //convert set to list evenNumSet = new LinkedHashSet(numList); //convert list to set //Print the sorted set System.out.println('Sorted Set:' + evenNumSet); } }
Výstup:
Netříděná sada: (4, 8, 6, 2, 12, 10, 62, 40, 36)
Seřazená sada: (2, 4, 6, 8, 10, 12, 36, 40, 62)
otevření datového souboru na macu
Seznam Vs nastavených v Javě
Pojďme diskutovat o některých rozdílech mezi seznamem a sadou.
Seznam | Soubor |
---|---|
Nulové hodnoty jsou povoleny. | Je povolena pouze jedna nulová hodnota. |
Rozhraní seznamu implementací. | Implementuje rozhraní Set. |
Obsahuje třídu Legacy, Vector. | Žádné starší třídy. |
ArrayList, LinkedList je implementace rozhraní seznamu. | HashSet, TreeSet, LinkedHashSet jsou implementace Set. |
Uspořádaná posloupnost prvků. | Neuspořádaná kolekce odlišných prvků. |
Umožňuje duplikáty. | Nejsou povoleny žádné duplikáty. |
Možnost přístupu k prvkům podle polohy prvku. | Žádný poziční přístup. |
Nové metody definované v rozhraní seznamu. | V rozhraní Set nejsou definovány žádné nové metody. U podtříd Set je třeba použít metody rozhraní kolekce. |
Lze jím procházet dopředu a dozadu pomocí ListIterator. | Lze s ním projíždět pouze dopředu pomocí Iterátoru. |
Často kladené otázky
Otázka č. 1) Co je sada v Javě?
Odpovědět: Sada je neuspořádaná sbírka jedinečných prvků a obvykle modeluje koncept sady v matematice.
Set je rozhraní, které rozšiřuje rozhraní Collection. Obsahuje metody, které zdědí z rozhraní Collection. Nastavené rozhraní přidává pouze omezení, tj. Neměly by být povoleny žádné duplikáty.
Otázka č. 2)Je sada objednána v Javě?
Odpovědět: Ne. Sada Java není objednána. Neposkytuje také poziční přístup.
Otázka č. 3)Může sada obsahovat duplikáty?
Odpovědět: Sada je kolekce jedinečných prvků, nemůže mít žádné duplikáty.
Otázka č. 4)Je Java Set iterovatelný?
Odpovědět: Ano. Rozhraní sady implementuje Iterovatelné rozhraní a takto lze sadu procházet nebo iterovat pomocí smyčky forEach.
Otázka č. 5)Je v sadě povolena hodnota NULL?
Odpovědět: Sada umožňuje nulovou hodnotu, ale v implementacích sady, jako je HashSet a LinkedHashSet, je povolena nejvýše jedna nulová hodnota. V případě TreeSet vyvolá runtime výjimku, pokud je zadána hodnota null.
Závěr
V tomto kurzu jsme diskutovali o obecných konceptech a implementaci souvisejících s Set interface v Javě.
Nastavené rozhraní nemá definované žádné nové metody, ale používá metody rozhraní Collector a pouze přidává implementaci, která zakazuje duplicitní hodnoty. Sada umožňuje nanejvýš jednu nulovou hodnotu.
V našich dalších výukách budeme diskutovat o konkrétních implementacích rozhraní Set, jako jsou HashSet a TreeSet.
=> Navštivte zde a dozvíte se Java od začátku.
Doporučené čtení
- Výukový program Java Reflection s příklady
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video
- Java String obsahuje () Výukový program metod s příklady
- Jagged Array In Java - výukový program s příklady
- Výukový program třídy skeneru Java s příklady
- Výukový program Java Array Length s příklady kódu
- Výukový program Java String | Metody řetězců Java s příklady
- Co je Java Vector | Výukový program Java Vector Class s příklady