Primitív gyűjtemények az Eclipse gyűjteményekben

1. Bemutatkozás

Ebben az oktatóanyagban a Java primitív gyűjteményeiről beszélünk, és arról, hogy az Eclipse Gyűjtemények hogyan segíthetnek.

2. Motiváció

Tegyük fel, hogy egyszerű egész számokat akarunk létrehozni:

List myList = new ArrayList; int egy = 1; myList.add (egy);

Mivel a gyűjtemények csak tárgyi hivatkozásokat tárolhatnak, a kulisszák mögött, a egy átalakul an-vá Egész szám a folyamat. A bokszolás és a kicsomagolás természetesen nem ingyenes. Ennek eredményeként teljesítményvesztés tapasztalható ebben a folyamatban.

Tehát először is, az Eclipse Collections primitív gyűjteményeinek használata gyorsabb lendületet adhat számunkra.

Másodszor, csökkenti a memória lábnyomát. Az alábbi grafikon összehasonlítja a memóriahasználatot a hagyományos között Tömb lista és IntArrayList az Eclipse gyűjteményektől:

* Kép kivonva: //www.eclipse.org/collections/#concept

És persze ne felejtsük el, hogy a sokféle megvalósítás nagy eladót jelent az Eclipse Gyűjtemények számára.

Vegye figyelembe azt is, hogy a Java eddig a pontig nem támogatja a primitív gyűjteményeket. Azonban, A Valhalla projekt a JEP 218-on keresztül azt kívánja hozzáadni.

3. Függőségek

A Maven használatával belefoglaljuk a szükséges függőségeket:

 org.eclipse.collections eclipse-gyűjtemények-api 10.0.0 org.eclipse.collections eclipse-gyűjtemények 10.0.0 

4. hosszú Lista

Az Eclipse Collections memóriára optimalizált listákat, készleteket, halmokat, térképeket és táskákat tartalmaz az összes primitív típushoz. Nézzünk néhány példát.

Először vessünk egy pillantást egy listára hosszús:

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

5. int Lista

Hasonlóképpen létrehozhatunk egy változhatatlan listát ints:

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

6. Térképek

Amellett, hogy a Térkép interfész módszerek, az Eclipse Gyűjtemények újakat mutatnak be minden primitív párosításhoz:

@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. Feladó Iterálható a primitív gyűjteményekhez

Emellett az Eclipse Gyűjtemények is együttműködnek Iterálható:

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

Továbbá létrehozhatunk egy primitív térképet Iterálható:

@Test public void whenCreateMapFromStream_thenValuesMustMatch () {Iterálható egész számok = Interval.oneTo (3); MutableIntIntMap map = IntIntMaps.mutable.from (egész számok, kulcs -> kulcs, érték -> érték * érték); MutableIntIntMap várható = IntIntMaps.mutable.empty () .withKeyValue (1, 1) .withKeyValue (2, 4) .withKeyValue (3, 9); assertEquals (várható, térkép); }

8. Patakok a primitívekről

Mivel a Java már primitív streamekkel érkezik, és az Eclipse Collections szépen integrálódik velük:

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

9. Következtetés

Összefoglalva: ez a bemutató az Eclipse gyűjtemények primitív gyűjteményeit mutatta be. Bemutattuk a használatának okait, és bemutattuk, hogy milyen könnyen hozzá tudjuk adni az alkalmazásainkhoz.

Mint mindig, a kód elérhető a GitHubon.