Uvod u PCollections

1. Pregled

U ovom ćemo članku pogledati PCollections, a Java knjižnica pruža trajne, nepromjenjive zbirke.

Trajne strukture podataka (zbirke) ne mogu se izravno mijenjati tijekom postupka ažuriranja, već se vraća novi objekt s rezultatom postupka ažuriranja. Oni su ne samo nepromjenjivi već i ustrajni - što znači da nakon izvršene modifikacije, prethodne verzije zbirke ostaju nepromijenjene.

PCollections je analogan i kompatibilan s okvirom Java Collections.

2. Ovisnosti

Dodajmo sljedeću ovisnost na našu pom.xml za nas da koristimo PCollections u našem projektu:

 kolekcije org. kolekcija 2.1.2 

Ako se naš projekt temelji na Gradleu, možemo dodati isti artefakt našem graditi.gradle datoteka:

sastaviti 'org.pcollections: pcollections: 2.1.2'

Najnoviju verziju možete pronaći na Maven Central.

3. Struktura karte (HashPMap)

HashPMap je postojana struktura podataka karte. To je analog za java.util.HashMap koristi se za pohranu ne-null podataka ključ / vrijednost.

Možemo instancirati HashPMap uporabom prikladnih statičkih metoda u HashTreePMap. Ove statičke metode vraćaju a HashPMap instancu iza koje stoji IntTreePMap.

Statički prazan() metoda HashTreePMap klasa stvara prazan HashPMap koji nema elemente - baš kao i korištenje zadanog konstruktora za java.util.HashMap:

HashPMap pmap = HashTreePMap.empty ();

Postoje dvije druge statičke metode koje možemo koristiti za stvaranje HashPMap. The jednokrevetna () metoda stvara a HashPMap sa samo jednim unosom:

HashPMap pmap1 = HashTreePMap.singleton ("key1", "value1"); assertEquals (pmap1.size (), 1);

The iz() metoda stvara a HashPMap od postojećeg java.util.HashMap instanci (i drugo java.util.Map implementacije):

Karta karte = novi HashMap (); map.put ("mkey1", "mval1"); map.put ("mkey2", "mval2"); HashPMap pmap2 = HashTreePMap.from (karta); assertEquals (pmap2.size (), 2);

Iako HashPMap nasljeđuje neke metode od java.util.Apstraktna karta i java.util.Map, ima metode koje su njemu svojstvene.

The minus() metoda uklanja jedan unos s karte dok minusSve () metoda uklanja više unosa. Tu je i plus() i plusSve () metode koje dodaju pojedinačne i višestruke unose:

HashPMap pmap = HashTreePMap.empty (); HashPMap pmap0 = pmap.plus ("key1", "value1"); Karta karte = novi HashMap (); map.put ("key2", "val2"); map.put ("key3", "val3"); HashPMap pmap1 = pmap0.plusAll (karta); HashPMap pmap2 = pmap1.minus ("ključ1"); HashPMap pmap3 = pmap2.minusAll (map.keySet ()); assertEquals (pmap0.size (), 1); assertEquals (pmap1.size (), 3); assertFalse (pmap2.containsKey ("key1")); assertEquals (pmap3.size (), 0);

Važno je napomenuti da pozivanje staviti() na pmap bacit će UnsupportedOperationException. Budući da su objekti PCollections trajni i nepromjenjivi, svaka operacija mijenjanja vraća novu instancu objekta (HashPMap).

Idemo dalje na druge strukture podataka.

4. Struktura popisa (TreePVector i ConsPStack)

TreePVector je trajni analog java.util.ArrayList dok ConsPStack je analogni java.util.LinkedList. TreePVector i ConsPStack imaju prikladne statičke metode za stvaranje novih primjeraka - baš kao HashPMap.

The prazan() metoda stvara prazno TreePVector, dok jednokrevetna () metoda stvara a TreePVector sa samo jednim elementom. Tu je i iz() metoda koja se može koristiti za stvaranje instance TreePVector od bilo kojeg java.util.Zbirka.

ConsPStack ima statičke metode s istim imenom koje postižu isti cilj.

TreePVector ima metode za manipulaciju njime. Ima minus() i minusSve () metode uklanjanja elemenata; the plus(), i plusSve () za dodavanje elemenata.

The s() koristi se za zamjenu elementa na navedenom indeksu, a podlista () dobiva niz elemenata iz kolekcije.

Te su metode dostupne u ConsPStack također.

Razmotrimo sljedeći isječak koda koji ilustrira gore spomenute metode:

TreePVector pVector = TreePVector.empty (); TreePVector pV1 = pVector.plus ("e1"); TreePVector pV2 = pV1.plusAll (Arrays.asList ("e2", "e3", "e4")); assertEquals (1, pV1.size ()); assertEquals (4, pV2.size ()); TreePVector pV3 = pV2.minus ("e1"); TreePVector pV4 = pV3.minusAll (Arrays.asList ("e2", "e3", "e4")); assertEquals (pV3.size (), 3); assertEquals (pV4.size (), 0); TreePVector pSub = pV2.subList (0, 2); assertTrue (pSub.contens ("e1") && pSub.contains ("e2")); TreePVector pVW = (TreePVector) pV2.with (0, "e10"); assertEquals (pVW.get (0), "e10");

U isječku koda gore, pSub je drugo TreePVector objekt i neovisan je o pV2. Kao što se može primijetiti, pV2 nije promijenio podlista () operacija; nego nova TreePVector objekt je stvoren i ispunjen elementima pV2 od indeksa 0 do 2.

To se podrazumijeva pod nepromjenjivošću i događa se sa svim modificirajućim metodama PCollections.

5. Postavite strukturu (MapPSet)

MapPSet je uporan, zaštićen mapama, analogni java.util.HashSet. Može se povoljno instancirati statičkim metodama HashTreePSet - prazan(), iz() i jednokrevetna (). Oni funkcioniraju na isti način kao što je objašnjeno u prethodnim primjerima.

MapPSet ima plus(), plusSve (), minus() i minusSve () metode za manipulaciju skupljenim podacima. Nadalje, nasljeđuje metode od java.util.Set, java.util.ApstractCollection i java.util.AbstractSet:

MapPSet pSet = HashTreePSet.empty () .plusAll (Arrays.asList ("e1", "e2", "e3", "e4")); assertEquals (pSet.size (), 4); MapPSet pSet1 = pSet.minus ("e4"); assertFalse (pSet1.contens ("e4"));

Napokon, tu je i NaručenPSet - koji održava redoslijed umetanja elemenata baš kao java.util.LinkedHashSet.

6. Zaključak

U zaključku smo u ovom brzom vodiču istražili PCollections - postojane podatkovne strukture koje su analogne temeljnim zbirkama koje imamo na raspolaganju na Javi. Naravno, PCollections Javadoc pruža više uvida u zamršenost knjižnice.

I, kao i uvijek do sada, cjeloviti kod možete pronaći na Githubu.


$config[zx-auto] not found$config[zx-overlay] not found