Primitivne zbirke u kolekcijama Eclipse

1. Uvod

U ovom uputstvu razgovarat ćemo o primitivnim kolekcijama u Javi i o tome kako Eclipse Collections mogu pomoći.

2. Motivacija

Pretpostavimo da želimo stvoriti jednostavan popis cijelih brojeva:

Popis myList = novi ArrayList; int jedan = 1; myList.add (jedan);

Budući da zbirke mogu sadržavati samo reference predmeta, iza kulisa, jedan pretvara se u Cijeli broj u procesu. Boks i raspakiranje nisu besplatni, naravno. Kao rezultat, u ovom procesu dolazi do gubitka performansi.

Dakle, prvo, korištenje primitivnih kolekcija iz Eclipse Collections može nam povećati brzinu.

Drugo, smanjuje trag memorije. Grafikon u nastavku uspoređuje upotrebu memorije između tradicionalnih ArrayList i IntArrayList iz kolekcija Eclipse:

* Slika izvučena iz //www.eclipse.org/collections/#concept

I naravno, ne zaboravimo, raznolikost implementacija velik je prodavač Eclipse kolekcija.

Također imajte na umu da Java do ovog trenutka nema podršku za primitivne zbirke. Međutim, Projekt Valhalla kroz JEP 218 želi ga dodati.

3. Ovisnosti

Maven ćemo koristiti za uključivanje potrebnih ovisnosti:

 org.eclipse.collections eclipse-collection-api 10.0.0 org.eclipse.collections eclipse-collection 10.0.0 

4. dugo Popis

Eclipse Collections ima memorijski optimizirane popise, skupove, stogove, mape i vrećice za sve primitivne tipove. Krenimo u nekoliko primjera.

Prvo, pogledajmo popis dugos:

@Test public void whenListOfLongHasOneTwoThree_thenSumIsSix () {MutableLongList longList = LongLists.mutable.of (1L, 2L, 3L); assertEquals (6, longList.sum ()); }

5. int Popis

Isto tako, možemo stvoriti nepromjenjiv popis ints:

@Test public void whenListOfIntHasOneTwoThree_thenMaxIsThree () {ImmutableIntList intList = IntLists.immutable.of (1, 2, 3); assertEquals (3, intList.max ()); }

6. Karte

Uz to Karta metode sučelja, kolekcije Eclipse predstavljaju nove za svako primitivno uparivanje:

@Test public void testOperationsOnIntIntMap () {MutableIntIntMap map = new IntIntHashMap (); assertEquals (5, map.addToValue (0, 5)); assertEquals (5, map.get (0)); assertEquals (3, map.getIfAbsentPut (1, 3)); }

7. Od Iterativ primitivnim zbirkama

Također, Eclipse Collections radi s Iterativ:

@Test public void whenConvertFromIterableToPrimitive_thenValuesAreEqual () {Iterable iterable = Interval.oneTo (3); MutableIntSet intSet = IntSets.mutable.withAll (iterable); IntInterval intInterval = IntInterval.oneTo (3); assertEquals (intInterval.toSet (), intSet); }

Dalje, možemo stvoriti primitivnu mapu od Može se probati:

@Test public void whenCreateMapFromStream_thenValuesMustMatch () {Iterable integers = Interval.oneTo (3); MutableIntIntMap map = IntIntMaps.mutable.from (cijeli brojevi, ključ -> ključ, vrijednost -> vrijednost * vrijednost); Očekuje se MutableIntIntMap = IntIntMaps.mutable.empty () .withKeyValue (1, 1) .withKeyValue (2, 4) .withKeyValue (3, 9); assertEquals (očekuje se, karta); }

8. Potoci na primitivcima

Budući da Java već dolazi s primitivnim streamovima, a Eclipse Collections se lijepo integrira s njima:

@Test public void whenCreateDoubleStream_thenAverageIsThree () {DoubleStream doubleStream = DoubleLists .mutable.with (1.0, 2.0, 3.0, 4.0, 5.0) .primitiveStream (); assertEquals (3, doubleStream.average (). getAsDouble (), 0,001); }

9. Zaključak

Zaključno, ovaj je vodič predstavio primitivne kolekcije iz Eclipse Collections. Pokazali smo razloge da ga koristimo i predstavili kako ga lako možemo dodati u svoje aplikacije.

Kao i uvijek kod je dostupan na GitHub-u.


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