Collections primitives dans les collections Eclipse

1. Introduction

Dans ce didacticiel, nous parlerons des collections primitives en Java et de la manière dont les collections Eclipse peuvent vous aider.

2. Motivation

Supposons que nous voulions créer une simple liste d'entiers:

List myList = new ArrayList; int one = 1; myList.add(one);

Étant donné que les collections ne peuvent contenir que des références d'objet, dans les coulisses, celle- ci est convertie en un entier dans le processus. La boxe et le déballage ne sont pas gratuits, bien sûr. En conséquence, il y a une perte de performances dans ce processus.

Donc, tout d'abord, l'utilisation de collections primitives d'Eclipse Collections peut nous donner un coup de pouce.

Deuxièmement, cela réduit l'empreinte mémoire. Le graphique ci-dessous compare l'utilisation de la mémoire entre les ArrayList traditionnelles et IntArrayList des collections Eclipse:

* Image extraite de //www.eclipse.org/collections/#concept

Et bien sûr, n'oublions pas, la variété des implémentations est un gros vendeur pour les collections Eclipse.

Notez également que jusqu'à présent, Java ne prend pas en charge les collections primitives. Cependant, le projet Valhalla à travers JEP 218 vise à l'ajouter.

3. Dépendances

Nous utiliserons Maven pour inclure les dépendances requises:

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

4. longue liste

Eclipse Collections a des listes, des ensembles, des piles, des cartes et des sacs optimisés en mémoire pour tous les types primitifs. Passons à quelques exemples.

Tout d'abord, jetons un œil à une liste de longs s:

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

5. int Liste

De même, nous pouvons créer une liste immuable de int s:

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

6. Cartes

En plus des méthodes d'interface Map , les collections Eclipse en présentent de nouvelles pour chaque appariement primitif:

@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. Des collections itérables aux collections primitives

De plus, Eclipse Collections fonctionne avec Iterable :

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

De plus, nous pouvons créer une carte primitive à partir de Iterable:

@Test public void whenCreateMapFromStream_thenValuesMustMatch() { Iterable integers = Interval.oneTo(3); MutableIntIntMap map = IntIntMaps.mutable.from( integers, key -> key, value -> value * value); MutableIntIntMap expected = IntIntMaps.mutable.empty() .withKeyValue(1, 1) .withKeyValue(2, 4) .withKeyValue(3, 9); assertEquals(expected, map); }

8. Flux sur les primitives

Étant donné que Java est déjà livré avec des flux primitifs, et que les collections Eclipse s'intègrent bien avec eux:

@Test public void 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. Conclusion

En conclusion, ce tutoriel présentait des collections primitives d'Eclipse Collections. Nous avons démontré des raisons de l'utiliser et présenté la facilité avec laquelle nous pouvons l'ajouter à nos applications.

Comme toujours, le code est disponible sur GitHub.