171 votes

Tableau immuable en Java

Existe-t-il une alternative immuable aux tableaux primitifs en Java ? Création d'un tableau primitif final n'empêche pas réellement de faire quelque chose comme

final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;

Je veux que les éléments du tableau soient immuables.

4voto

Thomas Mueller Points 18666

Si vous avez besoin (pour des raisons de performance ou pour économiser de la mémoire) d'un 'int' natif au lieu d'un 'java.lang.Integer', vous devrez probablement écrire votre propre classe d'enveloppe. Il existe plusieurs implémentations de IntArray sur le net, mais aucune (j'ai trouvé) n'est immuable : Koders IntArray , Lucene IntArray . Il y en a probablement d'autres.

1voto

Snowman Points 1199

Non, ce n'est pas possible. Cependant, on pourrait faire quelque chose comme ceci :

List<Integer> temp = new ArrayList<Integer>();
temp.add(Integer.valueOf(0));
temp.add(Integer.valueOf(2));
temp.add(Integer.valueOf(3));
temp.add(Integer.valueOf(4));
List<Integer> immutable = Collections.unmodifiableList(temp);

Cela nécessite l'utilisation de wrappers, et c'est une liste, pas un tableau, mais c'est ce qui s'en rapproche le plus.

1voto

kevinarpe Points 2902

Dans certaines situations, il sera plus léger d'utiliser cette méthode statique de la bibliothèque Google Guava : List<Integer> Ints.asList(int... backingArray)

Exemples :

  • List<Integer> x1 = Ints.asList(0, 1, 2, 3)
  • List<Integer> x1 = Ints.asList(new int[] { 0, 1, 2, 3})

1voto

Sarge Borsch Points 2044

Si vous voulez éviter à la fois la mutabilité et le boxing, il n'y a pas de moyen de sortir de la boîte. Mais vous pouvez créer une classe qui contient un tableau primitif et fournit un accès en lecture seule aux éléments via une ou plusieurs méthodes.

0voto

user1198898 Points 303

Vérifiez la section sur la mutabilité des tableaux
Docs Java sun !
Il m'a aidé !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X