Úvod do výberu PC

1. Prehľad

V tomto článku sa pozrieme na PCollections, a Knižnica Java poskytujúca trvalé, nemenné zbierky.

Trvalé dátové štruktúry (kolekcie) nie je možné upravovať priamo počas operácie aktualizácie, skôr sa vráti nový objekt s výsledkom operácie aktualizácie. Sú nielen nemenné, ale aj trvalé - čo to znamená po vykonaní úprav zostávajú predchádzajúce verzie kolekcie nezmenené.

PCollections je obdobný a kompatibilný s rámcom Java Collections.

2. Závislosti

Pridajme k našej nasledujúcej závislosti pom.xml pre nás, aby sme použili PCollections v našom projekte:

 org.zbery zbierky 2.1.2 

Ak je náš projekt založený na Gradle, môžeme pridať ten istý artefakt aj k nášmu build.gradle spis:

zostaviť 'org.pcollections: pcollections: 2.1.2'

Najnovšiu verziu nájdete na serveri Maven Central.

3. Štruktúra mapy (HashPMap)

HashPMap je vytrvalá dátová štruktúra mapy. Je to analóg pre java.util.HashMap slúži na ukladanie nenulových údajov kľúč - hodnota.

Môžeme urobiť inštanciu HashPMap pomocou pohodlných statických metód v systéme Windows HashTreePMap. Tieto statické metódy vracajú a HashPMap inštancia, ktorá je podporená IntTreePMap.

Statická prázdne () metóda HashTreePMap trieda vytvorí prázdny HashPMap ktorý nemá žiadne prvky - rovnako ako použitie predvoleného konštruktora java.util.HashMap:

HashPMap pmap = HashTreePMap.empty ();

Na vytvorenie môžeme použiť ďalšie dve statické metódy HashPMap. The singleton () metóda vytvára a HashPMap iba s jedným vstupom:

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

The od () metóda vytvára a HashPMap z existujúceho java.util.HashMap inštancia (a ďalšie java.util.Map implementácie):

Mapová mapa = nová HashMap (); map.put ("mkey1", "mval1"); map.put ("mkey2", "mval2"); HashPMap pmap2 = HashTreePMap.from (mapa); assertEquals (pmap2.size (), 2);

Hoci HashPMap zdedí niektoré z metód java.util.AbstractMap a java.util.Map, má metódy, ktoré sú pre ňu jedinečné.

The mínus () metóda odstráni jeden záznam z mapy, zatiaľ čo mínus všetko () metóda odstráni viac položiek. K dispozícii je tiež plus() a plusAll () metódy, ktoré pridávajú jeden a viac záznamov:

HashPMap pmap = HashTreePMap.empty (); HashPMap pmap0 = pmap.plus ("key1", "value1"); Mapová mapa = nová HashMap (); map.put ("key2", "val2"); map.put ("key3", "val3"); HashPMap pmap1 = pmap0.plusAll (mapa); HashPMap pmap2 = pmap1.minus ("kľúč1"); HashPMap pmap3 = pmap2.minusAll (map.keySet ()); assertEquals (pmap0.size (), 1); assertEquals (pmap1.size (), 3); assertFalse (pmap2.containsKey ("key1")); assertEquals (pmap3.size (), 0);

Je dôležité si uvedomiť, že telefonovanie put () na pmap bude hádzať UnsupportedOperationException. Pretože objekty PCollections sú trvalé a nemenné, každá operácia úpravy vráti novú inštanciu objektu (HashPMap).

Poďme sa pozrieť na ďalšie dátové štruktúry.

4. Štruktúra zoznamu (TreePVector a ConsPStack)

TreePVector je trvalý analóg z java.util.ArrayList zatiaľ čo ConsPStack je obdobou java.util.LinkedList. TreePVector a ConsPStack mať pohodlné statické metódy na vytváranie nových inštancií - rovnako ako HashPMap.

The prázdne () metóda vytvorí prázdny TreePVector, kým singleton () metóda vytvára a TreePVector iba s jedným prvkom. K dispozícii je tiež od () metóda, ktorá sa dá použiť na vytvorenie inštancie TreePVector z hocijakej java.util.Collection.

ConsPStack má statické metódy s rovnakým názvom, ktoré dosahujú rovnaký cieľ.

TreePVector má metódy na manipuláciu s ním. Má to mínus () a mínus všetko () metódy odstránenia prvku (prvkov); the plus()a plusAll () na doplnenie prvku (prvkov).

The s () sa používa na nahradenie prvku pri určenom indexe a znak subList () získava rad prvkov z kolekcie.

Tieto metódy sú k dispozícii v ConsPStack tiež.

Uvažujme o nasledujúcom útržku kódu, ktorý je príkladom vyššie uvedených metód:

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.contains ("e1") && pSub.contains ("e2")); TreePVector pVW = (TreePVector) pV2.with (0, "e10"); assertEquals (pVW.get (0), "e10");

V útržku kódu vyššie pSub je ďalší TreePVector objekt a je nezávislý od pV2. Ako je možné pozorovať, pV2 nebol zmenený subList () prevádzka; skôr nový TreePVector objekt bol vytvorený a naplnený prvkami pV2 z indexu 0 do 2.

Toto je myslené nemennosťou a deje sa to pri všetkých modifikačných metódach PCollections.

5. Nastaviť štruktúru (MapPSet)

MapPSet je perzistentný analóg mapovaného servera java.util.HashSet. Môže sa pohodlne vytvoriť pomocou statických metód HashTreePSet - prázdne (), od () a singleton (). Fungujú rovnakým spôsobom, ako je vysvetlené v predchádzajúcich príkladoch.

MapPSetplus(), plusAll (), mínus () a mínus všetko () metódy manipulácie s údajmi súboru. Ďalej dedí metódy z java.util.Set, java.util.AbstractCollection a 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.contains ("e4"));

Konečne je tu tiež OrderedPSet - ktorý udržuje poradie vkladania prvkov rovnako ako java.util.LinkedHashSet.

6. Záver

Na záver sme v tomto rýchlom výučbe preskúmali PCollections - trvalé dátové štruktúry, ktoré sú analogické k jadrovým kolekciám, ktoré máme k dispozícii v Jave. Program PCollections Javadoc samozrejme poskytuje viac informácií o zložitostiach knižnice.

A ako vždy, kompletný kód nájdete na Githube.


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