Primitieve collecties in Eclipse-collecties

1. Inleiding

In deze tutorial zullen we praten over primitieve collecties in Java en hoe Eclipse Collections kan helpen.

2. Motivatie

Stel dat we een eenvoudige lijst met gehele getallen willen maken:

Lijst myList = nieuwe ArrayList; int een = 1; myList.add (een);

Aangezien collecties alleen objectreferenties kunnen bevatten, is achter de schermen het een wordt geconverteerd naar een Geheel getal in het proces. Het boksen en uitpakken is natuurlijk niet gratis. Als gevolg hiervan is er een prestatieverlies in dit proces.

Ten eerste kan het gebruik van primitieve collecties uit Eclipse Collections ons een snelheidsboost geven.

Ten tweede vermindert het de geheugenvoetafdruk. In de onderstaande grafiek wordt het geheugengebruik vergeleken met het traditionele ArrayList en IntArrayList van Eclipse Collections:

* Afbeelding geëxtraheerd uit //www.eclipse.org/collections/#concept

En laten we natuurlijk niet vergeten dat de verscheidenheid aan implementaties een grote verkoper is voor Eclipse Collections.

Merk ook op dat Java tot nu toe geen ondersteuning biedt voor primitieve verzamelingen. Echter, Project Valhalla via JEP 218 heeft tot doel het toe te voegen.

3. Afhankelijkheden

We gebruiken Maven om de vereiste afhankelijkheden op te nemen:

 org.eclipse.collections eclipse-collections-api 10.0.0 org.eclipse.collections eclipse-collections 10.0.0 

4. lang Lijst

Eclipse Collections heeft voor het geheugen geoptimaliseerde lijsten, sets, stapels, kaarten en tassen voor alle primitieve typen. Laten we naar een paar voorbeelden gaan.

Laten we eerst eens kijken naar een lijst met langs:

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

5. int Lijst

Evenzo kunnen we een onveranderlijke lijst maken van ints:

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

6. Kaarten

Naast de Kaart interfacemethoden, presenteren Eclipse Collections nieuwe voor elke primitieve koppeling:

@Test openbare ongeldige testOperationsOnIntIntMap () {MutableIntIntMap map = nieuwe IntIntHashMap (); assertEquals (5, map.addToValue (0, 5)); assertEquals (5, map.get (0)); assertEquals (3, map.getIfAbsentPut (1, 3)); }

7. Van Herhaalbaar naar primitieve collecties

Eclipse Collections werkt ook met Herhaalbaar:

@Test openbare leegte whenConvertFromIterableToPrimitive_thenValuesAreEqual () {Iterable iterable = Interval.oneTo (3); MutableIntSet intSet = IntSets.mutable.withAll (itereerbaar); IntInterval intInterval = IntInterval.oneTo (3); assertEquals (intInterval.toSet (), intSet); }

Verder kunnen we een primitieve kaart maken van Herhaalbaar:

@Test openbare leegte whenCreateMapFromStream_thenValuesMustMatch () {Herhaalbare gehele getallen = Interval.oneTo (3); MutableIntIntMap map = IntIntMaps.mutable.from (gehele getallen, sleutel -> sleutel, waarde -> waarde * waarde); MutableIntIntMap verwacht = IntIntMaps.mutable.empty () .withKeyValue (1, 1) .withKeyValue (2, 4) .withKeyValue (3, 9); assertEquals (verwacht, kaart); }

8. Streams op primitieven

Omdat Java al met primitieve streams wordt geleverd, en Eclipse Collections er mooi mee integreert:

@Test openbare leegte whenCreateDoubleStream_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. Conclusie

Tot slot presenteerde deze tutorial primitieve collecties van Eclipse Collections. We hebben redenen laten zien om het te gebruiken en hebben laten zien hoe gemakkelijk we het aan onze applicaties kunnen toevoegen.

Zoals altijd is de code beschikbaar op GitHub.