Primitive samlinger i formørkelsessamlinger
1. Introduktion
I denne vejledning taler vi om primitive samlinger i Java, og hvordan Eclipse Collections kan hjælpe.
2. Motivation
Antag, at vi vil oprette en simpel liste over heltal:
Liste myList = ny ArrayList; int one = 1; myList.add (en);
Da samlinger kun kan indeholde objektreferencer bag kulisserne en konverteres til en Heltal i processen. Boksning og unboxing er selvfølgelig ikke gratis. Som et resultat er der et præstationstab i denne proces.
Så først kan brug af primitive samlinger fra Eclipse Collections give os et hastighedsforøg.
For det andet reducerer det hukommelsesaftryk. Grafen nedenfor sammenligner hukommelsesforbrug mellem det traditionelle ArrayList og IntArrayList fra Eclipse Collections:
* Billede ekstraheret fra //www.eclipse.org/collections/#concept
Og selvfølgelig, lad os ikke glemme, at forskellige implementeringer er en stor sælger for Eclipse Collections.
Bemærk også, at Java indtil dette tidspunkt ikke understøtter primitive samlinger. Imidlertid, Projekt Valhalla gennem JEP 218 sigter mod at tilføje det.
3. Afhængigheder
Vi bruger Maven til at inkludere de krævede afhængigheder:
org.eclipse.collections formørkelse-samlinger-api 10.0.0 org.eclipse.collections formørkelses-samlinger 10.0.0
4. lang Liste
Eclipse Collections har hukommelsesoptimerede lister, sæt, stakke, kort og poser til alle de primitive typer. Lad os springe ind i et par eksempler.
Lad os først se på en liste over langs:
@Test offentlig ugyldig nårListOfLongHasOneTwoThree_thenSumIsSix () {MutableLongList longList = LongLists.mutable.of (1L, 2L, 3L); assertEquals (6, longList.sum ()); }
5. int Liste
På samme måde kan vi oprette en uforanderlig liste over ints:
@Test offentlig ugyldig nårListOfIntHasOneTwoThree_thenMaxIsThree () {ImmutableIntList intList = IntLists.immutable.of (1, 2, 3); assertEquals (3, intList.max ()); }
6. Kort
Ud over Kort interface-metoder, Eclipse Collections præsenterer nye for hver primitive parring:
@Test offentlig ugyldig testOperationsOnIntIntMap () {MutableIntIntMap map = new IntIntHashMap (); assertEquals (5, map.addToValue (0, 5)); assertEquals (5, map.get (0)); assertEquals (3, map.getIfAbsentPut (1, 3)); }
7. Fra Iterabel til primitive samlinger
Eclipse Collections fungerer også med Iterabel:
@Test offentlig ugyldig nårConvertFromIterableToPrimitive_thenValuesAreEqual () {Iterable iterable = Interval.oneTo (3); MutableIntSet intSet = IntSets.mutable.withAll (iterable); IntInterval intInterval = IntInterval.oneTo (3); assertEquals (intInterval.toSet (), intSet); }
Desuden kan vi oprette et primitivt kort fra Iterabel:
@Test offentlig ugyldigt nårCreateMapFromStream_thenValuesMustMatch () {Iterable heltal = Interval.oneTo (3); MutableIntIntMap map = IntIntMaps.mutable.from (heltal, nøgle -> nøgle, værdi -> værdi * værdi); MutableIntIntMap forventet = IntIntMaps.mutable.empty () .withKeyValue (1, 1) .withKeyValue (2, 4) .withKeyValue (3, 9); assertEquals (forventet, kort); }
8. Strømme om primitiver
Da Java allerede kommer med primitive streams, og Eclipse Collections integreres pænt med dem:
@Test offentlig ugyldigt nårCreateDoubleStream_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. Konklusion
Afslutningsvis præsenterede denne tutorial primitive samlinger fra Eclipse Collections. Vi demonstrerede grunde til at bruge det og præsenterede, hvor let vi kan tilføje det til vores applikationer.
Som altid er koden tilgængelig på GitHub.