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):
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.
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 af
add()- Hvis de allerede var A-studerende, ignoreres denne handling simpelthen.
- Hvis ikke, så fjern dem fra sættet af A-elever ved hjælp af
remove()- Hvis de ikke var A-studerende på dette tidspunkt, så ignoreres denne handling simpelthen.
- Hvis ja, føj dem til sættet af A-elever ved hjælp af
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ådeHashSeti 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.
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å enHashSetaf Strings, 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å enTreeSetaf Strings, 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 😊
GO TO FULL VERSION