1. Behållare och samlingar

Behållare eller samlingar är klasser som låter dig lagra och bearbeta flera objekt samtidigt. Du känner redan till två typer av behållare: arrayer och listor.

Java har flera dussin samlingar, som var och en lagrar element på sitt eget specifika sätt. Här är några av dem:

Samling Klass Beskrivning
List
ArrayList
Lista
LinkedList
Länkad lista
Vector
Vektor
Stack
Stack
Set
HashSet
Uppsättning
TreeSet
LinkedHashSet
Queue
PriorityQueue
ArrayQueue
Map
HashMap
Karta/Ordbok
TreeMap
HashTable

Namnen är något tvetydiga här. I de flesta programmeringsspråk kallas alla dessa datastrukturer samlingar, men inte i Java. I Java implementerar vissa av dessa klasser gränssnittet Collection, medan andra inte gör det.

Följaktligen delas samlingar in i samlingar i vid mening och samlingar i snäv mening (endast de som implementerar Collectiongränssnittet).

Så för att undvika förvirring, när vi talar om samlingar menar vi i ordets snäva bemärkelse, dvs klasser som implementerar gränssnittet Collection. Typerna List, Setoch Queueär alla samlingar. Samlingar i vid mening kallas i allmänhet för containrar . Dessa inkluderar typer som Mapoch arrayer.


2. HashSetsamling

Klassen HashSetär en typisk setsamling. På många sätt liknar det klassen ArrayList. På något sätt är det en mer primitiv version.

Du kan skapa ett HashSetobjekt med ett uttalande som:

HashSet<Type> name = new HashSet<Type>();

Var Typeär typen av element vi kommer att lagra i HashSetsamlingen.

Klassen HashSethar metoder som denna:

Metod Beskrivning
void add(Type value)
Lägger till valueelementet i samlingen
boolean remove(Type value)
Tar bort valueelementet från samlingen.
Returnerar trueom det fanns ett sådant element
boolean contains(Type value)
Kontrollerar om samlingen har ett valueelement
void clear()
Rensar samlingen och tar bort alla element
int size()
Returnerar antalet element i samlingen

Här är ett exempel på hur du använder en uppsättning.

Låt oss skriva ett program som säger adjö till användaren om han eller hon säger hej. För att göra det mer intressant kommer vi att ge vårt program förmågan att förstå "hej" på flera språk.

Koda Notera
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Skapa ett HashSetobjekt som lagrar Stringelement.


Vi lägger till hälsningar på olika språk till setvariabeln.




Läs en rad från konsolen.


Om strängen finns i vår uppsättning hälsningar, då säger vi adjö.


3. Ställ in

Kollektionen Setär designad för att hålla en uppsättning element. Det är därför det kallas en Set(uppsättning). Denna samling har tre funktioner.

Operationer på en uppsättning

Det finns bara tre saker du kan göra med en uppsättning: lägga till element i uppsättningen, ta bort element från uppsättningen och kontrollera om uppsättningen innehåller ett specifikt element. Det är allt.

Ingen order

Element i denna samling har inga index. Du kan inte få ett element av ett index, eller skriva ett värde till en samling vid ett specifikt index. En uppsättning har inga get()och set()metoder.

Unika inslag

Alla element i en uppsättning är unika. Till skillnad från en lista kan en uppsättning endast innehålla en instans av ett element. Ett objekt är antingen i uppsättningen eller inte - det finns inget tredje alternativ. Du kan inte lägga till svart tre gånger till en uppsättning färger. Antingen finns den där eller så finns den inte.

Att hitta element

När du lägger till ett nytt element, tar bort ett element eller kontrollerar om ett element finns i en uppsättning, görs en sökning efter elementet i metoden. Det godkända elementet jämförs med elementen i samlingen först med , hashCode()och sedan om värdena som returneras av hashCode()matchning, med equals().



4. Jämföra samlingar: ListvsSet

Låt oss jämföra två typer av samlingar: Listoch Setvi kommer att titta på de viktigaste skillnaderna, när den ena är mer fördelaktig än den andra, och vice versa.

Låt oss försöka jämföra List och Set med leksaker som exempel.

( List List)samlingen är som en uppsättning leksaker ordnade längs väggen i ett lekrum. Du kan lägga till en leksak i slutet av listan. Om du verkligen behöver kan du också sätta in den i mitten (men några av befintliga leksaker måste flyttas).

Varje leksak har ett index. Du kan referera till en leksak genom dess index och även ersätta leksak nummer 7 med leksak nummer 13. Du kan ta bort leksak nummer 4 från listan. Slutligen kan du lära dig indexet för varje leksak i listan.

Set(Set)kollektionen är mer som en hög med leksaker mitt på golvet. Du kan lägga till en leksak i högen och du kan ta bort en leksak från högen. Men dessa leksaker har inte ett fast index kopplat till dem.

Eller anta att du väljer en leksak till ditt barns födelsedag. Först tänker du på om han redan har leksaken. Alla leksaker som han redan har bildar en uppsättning leksaker som du inte väljer att köpa.

Ur denna synvinkel kan du se att ordningen på leksaker i en uppsättning "leksaker som redan finns" inte spelar någon roll, inte heller spelar det någon roll om födelsedagsbarnet har två instanser av en viss leksak. Du är inte intresserad av beställningen eller numret på varje leksak. Det du bryr dig om är att känna till varje unik leksak som finns i setet.

För sådana här fall behöver du Setsamlingen. Dess mest populära implementering är HashSetklassen.