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 |
---|---|---|
|
|
Lista |
|
Länkad lista | |
|
Vektor | |
|
Stack | |
|
|
Uppsättning |
|
||
|
||
|
|
Kö |
|
||
|
|
Karta/Ordbok |
|
||
|
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 Collection
grä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
, Set
och Queue
är alla samlingar. Samlingar i vid mening kallas i allmänhet för containrar . Dessa inkluderar typer som Map
och arrayer.
2. HashSet
samling
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 HashSet
objekt med ett uttalande som:
HashSet<Type> name = new HashSet<Type>();
Var Type
är typen av element vi kommer att lagra i HashSet
samlingen.
Klassen HashSet
har metoder som denna:
Metod | Beskrivning |
---|---|
|
Lägger till value elementet i samlingen |
|
Tar bort value elementet från samlingen. Returnerar true om det fanns ett sådant element |
|
Kontrollerar om samlingen har ett value element |
|
Rensar samlingen och tar bort alla element |
|
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 |
---|---|
|
Skapa ett HashSet objekt som lagrar String element. Vi lägger till hälsningar på olika språk till set variabeln. 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: List
vsSet
Låt oss jämföra två typer av samlingar: List
och Set
vi 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 Set
samlingen. Dess mest populära implementering är HashSet
klassen.