CodeGym/Java blog/Tilfældig/Java-sættet som grænseflade
John Squirrels
Niveau
San Francisco

Java-sættet som grænseflade

Udgivet i gruppen
Et sæt er simpelthen en samling af unikke genstande. Unik betyder, at ikke to objekter kan have samme værdi(er). Afhængigt af implementeringen af ​​sættet, kan det eller måske ikke bestilles. Java-sættet, som en abstrakt datatype (ADT), har nogle få nøgleoperationer (hvor T repræsenterer enhver datatype, f.eks. int, streng eller et hvilket som helst klasseobjekt): Java-sættet som grænseflade - 1
  • boolean add(T item): returnerer sandt, hvis elementet er føjet til sættet, og falsk, hvis elementet allerede var i sættet.
  • boolean remove(T item): returnerer true, hvis varen blev fjernet fra sættet og falsk ellers (hvis varen ikke var i sættet).
  • boolean contains(T item): returnerer true, hvis varen er i sættet og ellers falsk.
  • boolean isEmpty(): returnerer sand, hvis sættet er tomt og ellers falsk.
Sættene i Java har ret selvforklarende funktionssignaturer (som de burde). Hvis du tilføjer to identiske elementer til et sæt, vil kun det første tilføjede element være i sættet. Alle efterfølgende forsøg på at tilføje det samme element vil blive ignoreret, medmindre elementet først fjernes. En af de mest brugte sætoperationer er at kontrollere, om en vare er inden for et givent sæt. Funktionen contains()giver en fantastisk køretid til dette: O(1) eller O(log n) tidskompleksitet afhængig af om den anvendte implementering er en HashSeteller enTreeSet, henholdsvis. Så hvad kan et sæt bruges til? Nå, hvis du nogensinde har brug for at holde styr på mange forskellige objekter - såsom id'er, navne eller andre unikke identifikatorer - og ofte kontrollere, om et element findes i en sådan samling, så er et sæt sandsynligvis et godt valg. Her er et eksempel på brugen af ​​et sæt: Forestil dig, at du har en liste over Studentobjekter, der repræsenterer alle eleverne i en given klasse. Hver Studentkan have et unikt navn (streng) og karakter (int) for denne klasse. Hvis du ofte ville referere til en liste over alle A-elever (karakter >=90), ville det være trættende at gå gennem denne liste og tjekke hver elevs karakter hver gang. I stedet kan du bruge en HashSetaf ​​strenge, som holder styr på alle A-elever i klassen, som sådan:
  • Hver gang elevernes karakterer opdateres, kan du blot tjekke, om Elevens nye karakter er større end eller lig med 90 eller ej.
    • Hvis ja, føj dem til sættet af A-elever ved hjælp afadd()
      • Hvis de allerede var A-studerende, ignoreres denne handling simpelthen.
    • Hvis ikke, så fjern dem fra sættet af A-elever ved hjælp afremove()
      • Hvis de ikke var A-studerende på dette tidspunkt, så ignoreres denne handling simpelthen.
Med et sådant system ville du altid have et opdateret sæt af alle 'A'-elever i din klasse. Hvis du ville tjekke, om Johnny Appleseed klarede sig godt i din klasse, kunne du nemt gøre det ved at ringe contains(“Johnny Appleseed”)på settet. Dette er selvfølgelig kun et eksempel på en use case for et sæt, og dette specifikke problem med at holde styr på A-elever kunne løses på andre måder.

Implementeringer: HashSet i Java og Java TreeSet eksempler

Både HashSeti Java og TreeSeti Java kommer i java.utils package. Du kan importere dem som sådan:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
eller
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
Den vigtigste forskel mellem Java HashSetog Java TreeSeter, at den TreeSeter sorteret, mens den HashSetikke er det. Dette er grunden til, at den TreeSethar O(log n) tidskompleksitet for nøgleoperationer, hvorimod HashSetden har O(1) eller konstant tidskompleksitet; skal TreeSetholde orden til enhver tid. Ud over de tidligere nævnte nøglesæt-operationer, har både HashSetog TreeSeti Java et par andre nyttige funktioner:
  • void clear(): rydder sættet af alle objekter.
  • int size(): returnerer antallet af objekter i sættet.
  • Object clone(): returnerer en overfladisk kopi af sættet.
  • Iterator iterator(): returnerer en iterator til sættet, startende ved det første objekt.
Du kan forestille dig at finde anvendelser for disse funktioner i eksemplet "liste over A-studerende": du kunne ringe, size()hvis du ville se, hvor mange 'A'-elever du havde, eller clear()hvis du ville rydde listen i slutningen af ​​semesteret. Du kan bruge clone()til at oprette og beholde en klon af listen over A-elever på et bestemt tidspunkt, f.eks. under midtvejsrapporter (på denne måde forbliver klonen ikke opdateret sammen med originalen).

Eksempel på Java HashSet

Her er et kort eksempel på en HashSetaf String​​s, der bruges i Java:
import java.util.HashSet;
class HashSetDemo {
    public static void main(String[] args)
    {
	  // create a HashSet of Strings
        HashSet<String> hs = new HashSet<String>();

        // Add elements using the add() method
        hs.add("Collin");
	  hs.add("Bob");
 	  hs.add("Abigail");

        // Duplicates will ignored; this statement is useless
        hs.add("Collin");


        System.out.println(hs);
	  System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + hs.contains("Max"));


    }
}
Output: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false

Java TreeSet eksempel

Java-eksempel kan hjælpe dig med at forstå teorien. Her er det korte eksempel på en TreeSetaf String​​s, der bruges i Java:
import java.util.TreeSet;
class TreeSetDemo {
    public static void main(String[] args)
    {
	  // create a TreeSet of Strings
        TreeSet<String> ts = new TreeSet<String>();

        // Add elements using the add() method.
        ts.add("Collin");
	  ts.add("Bob");
 	  ts.add("Abigail");

        // Duplicates will ignored; this statement is useless
        ts.add("Collin");

        // printing the set prints the names in alphabetical order!
        System.out.println(ts);

	  System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
  System.out.println("Size of the set: " + ts.size());
 	  ts.clear();
	  System.out.println("Size of the set after clear(): " + ts.size());


    }
}
Udgang: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
Det er alt! Håber dette hjalp 😊
Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu