Introduktion

Nästan varje program behöver lagra en viss uppsättning data. Det kan vara strängar och siffror, objekt och så vidare. Arrays är en fantastisk lagringslösning. Men arrayer har vissa begränsningar. Till exempel är deras storlek fast, element kan inte tas bort och du kan inte infoga element i mitten. Samlingar skapades för att komma runt dessa och andra begränsningar. Alla typer av samlingar (och det finns många av dem, som vi kommer att se senare i den här lektionen) har förmågan att dynamiskt ändra storlek på sig själva. Vissa samlingstyper kan lagra beställda element och automatiskt placera nya element i ordning när de läggs till.

I den här lektionen kommer vi att bekanta oss med klasshierarkin för bassamlingarna i Java Collections Framework . Det finns också olika alternativa bibliotek som utökar kapaciteten hos standard Java Collections Framework . Den mest populära av dessa är Guava (Google Collections Library).

*Alla gränssnitt och klasser är inte representerade i diagrammet. Vissa utelämnades för att göra det lättare att förstå.

Grundläggande gränssnitt

Diagrammet visar att det finns två grundläggande gränssnitt som är implementerade för att bilda resten av klasserna och gränssnitten.

Låt oss ta en titt på dessa gränssnitt:

  1. Samling — En vanlig samling som innehåller en uppsättning element (objekt). Den här samlingen har grundläggande metoder för att arbeta med element: infoga ( add , addAll ), remove ( remove , removeAll , rensa ), sök ( innehåller , containsAll ), kontrollera om samlingen är tom ( isEmpty ) och få storlek ( storlek ).

  2. Karta — En samling strukturerad som nyckel-värdepar. Dessutom är varje nyckel i en karta unik: inga två nycklar har identiska värden. Denna samling kallas ibland en ordbok . Kartan är ett separat gränssnitt. Den implementerar inte samlingsgränssnittet , men är en del av Java Collections Framework .

Användbara metoder för att arbeta med element i en karta :

  • infoga ( sätta , sätta Alla )

  • få ( get , keySet , values ​​, entrySet )

  • ta bort ( ta bort , rensa )

  • sök ( containsKey , containsValue )

  • kontrollera om samlingen är tom ( isEmpty )

  • få storlek ( storlek )

Låt oss nu prata mer om var och en av dem.

Samlingsgränssnitt

Collection - gränssnittet utökar Iterable- gränssnittet, som har en enda metod: iterator() . För oss betyder det att alla samlingar som ärver Iterable kommer att kunna returnera en iterator.

En iterator är ett speciellt objekt som du kan använda för att komma åt elementen i alla samlingar, oavsett dess specifika implementering.

Bilden visar att 3 gränssnitt ärver samlingsgränssnittet : List , Queue och Set . Nu ska vi titta på var och en av dem kort.

List är en ordnad samling som tillåter dubbletter av värden. En speciell egenskap hos en lista är att dess element är numrerade och kan nås med nummer (index).

En lagrar element i den ordning de lades till i kön.

Till skillnad från en lista representerar en uppsättning en oordnad samling som inte tillåter upprepade element. Uppsättningsgränssnittet motsvarar konceptet med en matematisk uppsättning .

Implementeringar av kartgränssnittet

Vi kan se att kartgränssnittet representerar en mappning mellan unika nycklar och värden.


interface Map<K, V>

där K är typen av nycklar och V är typen av lagrade värden.

Med hjälp av en nyckel kan vi extrahera data från en karta . För att lägga till ett element till en karta måste vi ange en nyckel och ett värde.

Låt oss titta på några implementeringar av Map :

  1. HashMap är en implementering av Map som är baserad på hashtabeller. Den kan lagra nycklar och värden av vilken typ som helst, inklusive null . Ordningen på elementen är inte garanterad.

  2. LinkedHashMap är en datastruktur som lagrar data som en länkad lista med element. Elementen visas i listan i den ordning som de lades till.

  3. TreeMap implementerar SortedMap- gränssnittet (via NavigableMap- gränssnittet). Elementen i denna struktur lagras i sorterad ordning (när ett nytt element läggs till sorteras samlingen automatiskt). TreeMap är utmärkt för att lagra stora mängder sorterad data med snabb hämtning.

Föråldrade samlingar:

Java har föråldrade samlingar från tidigare versioner (för att bibehålla bakåtkompatibilitet). Dessa gamla samlingar ska inte användas i ny kod:

  • Uppräkning — analogt med Iterator- gränssnittet;

  • Vector — en ordnad lista med element och analog medklassen ArrayList ;

  • Stack — en implementering av stackdatastrukturen, som lagrar och manipulerar element som hur du skulle interagera med en bunt böcker. Det finns metoder för att lägga till element i stacken ( push ) och ta bort dem ( pop );

  • Ordbok — analogt med kartgränssnittet , men det är en abstrakt klass;

  • Hashtable — analogt med HashMap .

Du kan läsa mer om Collections Framework i den här artikeln .