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.