treeset java tutorial with programming examples
Denna handledning förklarar allt om TreeSet Class, Implementation, Iteration, TreeSet Vs HashSet, Java TreeSet Exempel, etc:
TreeSet i Java implementerar Set-gränssnittet (mer specifikt SortedSet). TreeSet använder en TreeMap internt för att lagra data. Som standard lagras objekten eller elementen i TreeSet enligt den naturliga ordningen i stigande ordning.
TreeSet-klassen som implementerar TreeSet i Java implementerar gränssnittet ”NavigableSet” och ärver också klassen AbstractSet.
=> Kolla här för att se A-Z av Java-utbildningar här.
Vad du kommer att lära dig:
TreeSet i Java
Observera att TreeSet-elementen också kan beställas uttryckligen genom att tillhandahålla den anpassade komparatorn när du skapar ett TreeSet-objekt med den specifika konstruktorprototypen.
Nedan följer några av de viktiga egenskaperna hos TreeSet:
- TreeSet-klassen implementerar SortedSet-gränssnittet. Det tillåter inte dubbla element.
- TreeSet-klassen synkroniseras inte.
- TreeSet bevarar inte införingsordningen, men elementen i TreeSet sorteras enligt den naturliga ordningen.
- TreeSet kan beställas med hjälp av en anpassad komparator när du skapar ett TreeSet-objekt.
- TreeSet används normalt för att lagra stora mängder information som naturligt sorteras. Detta underlättar enkel och snabbare åtkomst.
TreeSet Klassdeklaration
Java tillhandahåller en klass som heter 'TreeSet' som innehåller funktionaliteten i TreeSet-datastrukturen. TreeSet-klassen är en del av paketet java.util.
För att inkludera TreeSet-klassen i Java-programmet bör vi använda importuttalandet enligt nedan:
import java.util.TreeSet;
eller
import java.util.*;
En allmän deklaration av TreeSet-klassen är:
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Som framgår av klassdeklarationen utökar TreeSet-klassen AbstractSet och implementerar gränssnitt NavigableSet, Cloneable och Serializable.
En klasshierarki för TreeSet-klassen ges nedan:
Intern implementering
Vi vet att TreeSet implementerar NavigableSet-gränssnittet och utökar SortedSet-klassen.
Internt definieras TreeSet-konstruktorn enligt följande:
public TreeSet() { this(new TreeMap()); }
Som framgår av ovanstående konstruktionsdefinition av TreeSet anropas ett TreeMap-objekt. Internt är det således ett TreeMap-objekt som implementeras för ett TreeSet. När du lägger till ett element i TreeSet läggs en nyckel till TreeMap där nycklarna sorteras som standard.
Enligt Oracle-dokumentation på TreeSet ,
'En TreeSet är en NavigableSet-implementering baserad på en TreeMap.'
Java TreeSet Exempel
Följande Java-program visar ett enkelt exempel som visar TreeSet. I det här programmet har vi definierat en enkel Color TreeSet. Vi lägger till element i det och visar det sedan. Observera att elementen visas enligt den naturliga ordningen.
import java.util.*; class Main{ public static void main(String args()){ //Create and add elements to TreeSet TreeSet color_TreeSet=new TreeSet(); color_TreeSet.add('Red'); color_TreeSet.add('Green'); color_TreeSet.add('Blue'); color_TreeSet.add('Yellow'); //Traverse the TreeSet and print elements one by one System.out.println('TreeSet Contents:'); Iterator iter=color_TreeSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Produktion:
TreeSet Innehåll:
Blå grön röd gul
Iterera genom TreeSet
För att komma åt de enskilda elementen i TreeSet, måste vi iterera genom TreeSet eller med andra ord, korsa genom TreeSet.
Vi gör detta genom att förklara en Iterator för TreeSet och sedan använda denna Iterator för att komma åt varje element. För detta använder vi nästa () metod för en iterator som returnerar nästa element i TreeSet.
Följande Java-program visar användningen av Iterator för att iterera genom TreeSet.
import java.util.TreeSet; import java.util.Iterator; class Main { public static void main(String() args) { //create and initialize TreeSet TreeSet num_Treeset = new TreeSet(); num_Treeset.add(20); num_Treeset.add(5); num_Treeset.add(15); num_Treeset.add(25); num_Treeset.add(10); System.out.println('TreeSet: ' + num_Treeset); // Call iterator() method to define Iterator for TreeSet Iterator iter_set = num_Treeset.iterator(); System.out.print('TreeSet using Iterator: '); // Access TreeSet elements using Iterator while(iter_set.hasNext()) { System.out.print(iter_set.next()); System.out.print(', '); } } }
Produktion:
TreeSet: (5, 10, 15, 20, 25)
TreeSet med Iterator: 5, 10, 15, 20, 25,
bästa spionprogramborttagaren för Windows 10
TreeSet-komparator i Java
Som standard är TreeSet naturligt ordnat. Vi kan också sortera TreeSet i en anpassad ordning genom att definiera en ny jämförelseklass. I den här jämförarklassen måste vi åsidosätta metoden 'jämför' för att sortera elementen i TreeSet. Detta jämförande objekt skickas sedan till TreeSet-konstruktören.
Följande Java-program visar användningen av en komparator för att sortera TreeSet.
import java.util.TreeSet; import java.util.Comparator; class Main { public static void main(String() args) { // Create a TreeSet with user-defined comparator TreeSet cities = new TreeSet(new cities_Comparator()); //add elements to the comparator cities.add('Pune'); cities.add('Hyderabad'); cities.add('Indore'); cities.add('Bangaluru'); //print the contents of TreeSet System.out.println('TreeSet: ' + cities); } // Create a comparator class public static class cities_Comparator implements Comparator { //override compare method to compare two elements of the TreeSet @Override public int compare(String cities_one, String cities_two) { int value = cities_one.compareTo(cities_two); // sort elements in reverse order if (value > 0) { return -1; } else if (value <0) { return 1; } else { return 0; } } } }
Produktion:
TreeSet: (Pune, Indore, Hyderabad, Bangaluru)
Ovanstående program implementerar en Comparator-klass för att sortera den givna TreeSet alfabetiskt i omvänd ordning.
Rekommenderad läsning = >> Java Comparator Interface
TreeSet API / Metoder och konstruktörer
I det här avsnittet kommer vi att diskutera API: et för TreeSet-klassen. Här kommer vi att diskutera konstruktörer och metoder som tillhandahålls av klassen TreeSet.
TreeSet-klassen ger överbelastade konstruktörer för att konstruera ett TreeSet-objekt.
Vi har tabelliserat dessa konstruktörer enligt följande:
Konstruktörer
Konstruktör prototyp | Beskrivning | |
---|---|---|
innehåller | boolean innehåller (Objekt o) | Kontrollerar om TreeSet innehåller ett visst element; sant om det finns. |
TreeSet () | Standardkonstruktör för att skapa ett nytt, tomt TreeSet-objekt. | |
TreeSet (samling c) | Skapar ett nytt TreeSet-objekt som innehåller elementen från given samling c, sorterade enligt naturlig ordning. | |
TreeSet (Jämförelsekomparator) | Konstruerar ett nytt TreeSet-objekt som är tomt och sorteras enligt angiven komparator. | |
TreeSet (SortedSet s) | Skapar ett nytt TreeSet-objekt som innehåller element från givna sortedSet s. |
Metoder
Låt oss sedan tabulera de olika metoderna som tillhandahålls av klassen TreeSet.
Metod | Metodprototyp | Beskrivning |
---|---|---|
Lägg till | boolesk tillsats (E e) | Lägger till ett visst element i TreeSet om det inte redan finns. |
Lägg till alla | boolean addAll (Collection c) | Lägger till alla element i den givna samlingen c i uppsättningen. |
tak | E-tak (E e) | Returnerar element som är större än eller lika med e (minst element); eller null om inget element finns. |
klar | ogiltig rensa () | Raderar alla element från TreeSet. |
klona | Objektklon () | Returnerar en grunt kopia av TreeSet-objektet. |
jämförare | Jämförelsekomparator () | Returnerar komparatorn för TreeSet eller null om naturlig beställning används. |
fallandeIterator | Iterator fallandeIterator () | Returnerar fallande iterator över elementen i TreeSet. |
descendingSet | NavigableSet descendingSet () | Returnerar en vy av element i TreeSet i omvänd ordning. |
först | E först () | Returnerar det första eller lägsta elementet i TreeSet. |
golv | E våning (E e) | Returnerar det element som är mindre än eller lika med det angivna elementet e i TreeSet. Returnerar null om inget sådant element finns. |
headset | SortedSet headSet (E toElement) | returnerar en uppsättning element som är strikt mindre än angiven till Element |
NavigableSet headSet (E toElement, boolean inklusive) | Returnerar en uppsättning element som är lika med (om inklusive = sant) eller mindre än givet till Element. | |
högre | E högre (E e) | Returnerar det minsta elementet i denna uppsättning som är strikt större än det angivna elementet, eller null om det inte finns något sådant element. |
är tom | boolean isEmpty () | Kontrollerar om TreeSet är tomt. Returnerar sant om det är tomt. |
iterator | Iterator iterator () | Returnerar en iterator (i stigande ordning) för TreeSet. |
sista | E sista () | Returnerar det högsta eller sista elementet i TreeSet. |
lägre | E lägre (E e) | Returnerar elementet (det största elementet) som är strikt mindre än det angivna elementet e i TreeSet. |
pollFirst | E pollFirst () | Tar bort och returnerar det första (lägsta) elementet i uppsättningen; null om uppsättningen är tom. |
pollLast | E pollLast () | Tar bort och returnerar det sista (största) elementet i uppsättningen; null om den är tom. |
ta bort | boolean ta bort (Objekt o) | Tar bort det givna elementet från uppsättningen. |
storlek | int storlek () | Returnerar storleken eller antalet element som finns i TreeSet. |
deluppsättning | NavigableSet subset (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Returnerar en vy av element som sträcker sig från Element till Element. |
SortedSet subSet (E fromElement, E toElement) | Returnerar en vy som sträcker sig från Element (inklusive) till Element (exklusivt). | |
tailSet | SortedSet tailSet (E fromElement) | Returnerar en vy som innehåller element som är större än eller lika med det som ges från Element. |
NavigableSet tailSet (E fromElement, inklusive boolean) | Returnerar en vy av elementen är lika med (om inkluderande är sant) eller större än fromElement. |
TreeSet i Java 8
Observera att det inte sker några större förändringar i Java 8-versionen för TreeSet. Alla metoder och konstruktörer fungerar i Java 8 och senare versioner.
TreeSet-implementering i Java
Följande Java-program implementerar de flesta av TreeSet-metoderna som diskuterats ovan.
import java.util.Iterator; import java.util.TreeSet; import java.util.ArrayList; public class Main { public static void main(String() args) { //create a TreeSet of numbers TreeSet numSet = new TreeSet(); //add () method numSet.add(30); numSet.add(10); //declare and initialize an ArrayList ArrayList myList = new ArrayList(); myList.add(15); myList.add(25); myList.add(35); //addAll () method : add ArrayList elements to TreeSet numSet.addAll(myList); //define an iterator on TreeSet Iterator iterator = numSet.iterator(); System.out.print('Tree set contents: '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //ceiling () System.out.println('ceiling(25):' + numSet.ceiling(25)); //floor () System.out.println('floor(25):' + numSet.floor(25)); //contains () System.out.println('TreeSet contains(15):' + numSet.contains(15)); // isEmpty () if (numSet.isEmpty()) System.out.print('Tree Set is empty.'); else System.out.println('Tree Set size: ' + numSet.size()); // first () System.out.println('TreeSet First element: ' + numSet.first()); // last () System.out.println('TreeSet Last element: ' + numSet.last()); // remove () if (numSet.remove(30)) System.out.println('Element 30 removed from TreeSet'); else System.out.println('Element 30 doesn't exist!'); System.out.print('TreeSet after remove (): '); iterator = numSet.iterator(); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //size () System.out.println('TreeSet size after remove (): ' + numSet.size()); //Headset () System.out.println('Headset : ' + numSet.headSet(35)); // clear () numSet.clear(); System.out.println('Tree Set size after clear (): ' + numSet.size()); } }
Produktion:
Träduppsättningens innehåll: 10 15 25 30 35
tak (25): 25
våning (25): 25
TreeSet innehåller (15): true
Träd Set storlek: 5
TreeSet Första elementet: 10
TreeSet Senaste element: 35
Element 30 bort från TreeSet
TreeSet efter ta bort (): 10 15 25 35
TreeSet storlek efter borttagning (): 4
Headset: (10, 15, 25)
Träd Ställ in storlek efter clear (): 0
I ovanstående program definierar vi ett TreeSet-objekt och lägger sedan till element i det med hjälp av 'lägg till' -metoden. Därefter definierar vi en ArrayList. Sedan lägger vi till element i ArrayList till TreeSet med metoden 'addAll'. Senare demonstrerar vi olika TreeSet-metoder som Iterator, tak, golv, första, sista, innehåller, storlek, är tomt etc.
TreeSet mot HashSet
Låt oss kolla in några av skillnaderna mellan TreeSet och HashSet.
TreeSet | HashSet |
---|---|
Element beställs enligt naturlig beställning. | Element beställs inte. |
Tar O (log N) tid för operationer som infoga, radera och söka och gör det därmed långsammare än TreeSet. | Tar konstant tid för grundläggande operationer som infoga, ta bort och söka vilket gör det snabbare än TreeSet. |
Tillåter inte nollobjekt. | Tillåter null-objekt. |
Använder jämförelsemetoden () för att jämföra två objekt. | Använder metoden jämför () och lik () för att jämföra två objekt. |
Internt implementerad med Navigable TreeMap. | Internt implementerad med HashMap. |
Har rika funktioner API som kan utföra olika manipulationer. | Funktionalitets-API: et för HashSet är ganska begränsat. |
Vanliga frågor
F # 1) Vad är en TreeSet?
Svar: TreeSet är en implementering av SortedSet som inte tillåter duplicerade värden. Elementen i TreeSet sorteras som standard i stigande ordning.
F # 2) Hur lägger du till element i TreeSet i Java?
Svar: TreeSet-klassen ger en add-metod som används för att lägga till ett specifikt element i TreeSet. Det ger också metoden 'addAll'. Den här metoden accepterar alla andra samlingar som argument och lägger sedan till alla element i samlingen i TreeSet.
F # 3) Är TreeSet trådsäker?
Svar: Nej. TreeSet är inte trådsäkert. Därför bör vi ta hand om hur vi använder TreeSet i en miljö med flera trådar.
F # 4) Kan TreeSet ha dubbletter?
Svar: Nej. TreeSet tillåter inte dubbletter.
F # 5)Tillåter TreeSet null i Java?
Svar: Ja. Vi kan ha nollelement i TreeSet.
Slutsats
Detta slutför vår handledning om TreeSet. TreeSet är en SortedSet-implementering som inte tillåter dubbletter men tillåter nullvärden. Elementen i TreeSet sorteras som standard efter naturlig ordning i stigande ordning.
Vi har sett grunderna i TreeSet-klassen tillsammans med dess deklaration och olika konstruktörer och metoder.
I våra efterföljande handledning diskuterar vi de återstående Java-samlingsklasserna.
=> Se upp den enkla Java-träningsserien här.
Rekommenderad läsning
- Binärt sökträd i Java - Implementering och kodexempel
- TreeMap In Java - Handledning med Java TreeMap-exempel
- Vad är Java Vector | Java Vector Class Tutorial med exempel
- Java Scanner-klasshandledning med exempel
- Java Array Class Tutorial - java.util.Arrays Class med exempel
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Java String innehåller () Metodhandledning med exempel
- Jagged Array In Java - Handledning med exempel