Primitive samlinger i formørkelsamlinger

1. Introduksjon

I denne veiledningen vil vi snakke om primitive samlinger i Java og hvordan Eclipse Collections kan hjelpe.

2. Motivasjon

Anta at vi vil lage en enkel liste over heltall:

Liste myList = ny ArrayList; int one = 1; myList.add (en);

Siden samlinger bare kan inneholde objektreferanser, bak kulissene, kan en konverteres til en Heltall i prosessen. Boksing og unboxing er selvfølgelig ikke gratis. Som et resultat er det prestasjonstap i denne prosessen.

Så, først, ved å bruke primitive samlinger fra Eclipse Collections, kan vi gi oss et fartløft.

For det andre reduserer det minnefotavtrykk. Grafen nedenfor sammenligner minnebruk mellom det tradisjonelle ArrayList og IntArrayList fra Eclipse Collections:

* Bilde hentet fra //www.eclipse.org/collections/#concept

Og selvfølgelig, la oss ikke glemme, mangfoldet av implementeringer er en stor selger for Eclipse Collections.

Legg også merke til at Java frem til dette tidspunktet ikke har støtte for primitive samlinger. Derimot, Prosjekt Valhalla gjennom JEP 218 tar sikte på å legge det til.

3. Avhengigheter

Vi bruker Maven til å inkludere de nødvendige avhengighetene:

 org.eclipse.collections formørkelse-samlinger-api 10.0.0 org.eclipse.collections formørkelse-samlinger 10.0.0 

4. lang Liste

Eclipse Collections har minneoptimaliserte lister, sett, stabler, kart og poser for alle primitive typer. La oss hoppe inn i noen få eksempler.

La oss 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åte kan vi lage en uforanderlig liste over ints:

@Test offentlig ugyldig nårListOfIntHasOneTwoThree_thenMaxIsThree () {ImmutableIntList intList = IntLists.immutable.of (1, 2, 3); assertEquals (3, intList.max ()); }

6. Kart

I tillegg til det Kart grensesnittmetoder, Eclipse Collections presenterer nye for hver primitive sammenkobling:

@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

Også Eclipse Collections jobber 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); }

Videre kan vi lage et primitivt kart fra Iterabel:

@Test offentlig ugyldig nårCreateMapFromStream_thenValuesMustMatch () {Iterable heltall = Interval.oneTo (3); MutableIntIntMap map = IntIntMaps.mutable.from (heltall, nøkkel -> nøkkel, verdi -> verdi * verdi); MutableIntIntMap forventet = IntIntMaps.mutable.empty () .withKeyValue (1, 1) .withKeyValue (2, 4) .withKeyValue (3, 9); assertEquals (forventet, kart); }

8. Strømmer på Primitives

Siden Java allerede kommer med primitive strømmer, og Eclipse Collections integreres fint med dem:

@Test offentlig ugyldig 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. Konklusjon

Avslutningsvis presenterte denne opplæringen primitive samlinger fra Eclipse Collections. Vi demonstrerte grunner til å bruke den og presenterte hvor enkelt vi kan legge den til i applikasjonene våre.

Som alltid er koden tilgjengelig på GitHub.


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