Ú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.
MapPSet má plus(), 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.