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.


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