Tableaux de longueur variable (dynamiques) en Java


Je me demandais comment initialiser un tableau entier de telle sorte que sa taille et ses valeurs changent tout au long de l'exécution de mon programme, des suggestions?

Author: Mohammad Sepahvand, 2010-03-11

9 answers

Oui: utilisez ArrayList.

En Java, les tableaux "normaux" sont de taille fixe. Vous devez leur donner une taille et ne pouvez pas les agrandir ou les contracter. Pour changer la taille, vous devez créer un nouveau tableau et copier les données que vous voulez - ce qui est inefficace et pénible pour vous.

Heureusement, il existe toutes sortes de classes intégrées qui implémentent des structures de données communes, et d'autres outils utiles aussi. Vous voudrez vérifier l'API Java 6 pour une liste complète d'entre eux.

Un mise en garde: ArrayList ne peut contenir que des objets (par exemple des entiers), pas des primitives (par exemple des ints). Dans LA PLUPART des cas, autoboxing/autounboxing s'occupera de cela pour vous silencieusement, mais vous pourriez avoir un comportement étrange en fonction de ce que vous faites.

 127
Author: Pops, 2013-11-01 22:20:23

Les tableaux en Java sont de taille fixe. Ce dont vous auriez besoin, c'est d'une ArrayList, l'une des nombreuses collections extrêmement précieuses disponibles en Java.

Au Lieu de

Integer[] ints = new Integer[x]

Vous utilisez

List<Integer> ints = new ArrayList<Integer>();

Ensuite, pour changer la liste, vous utilisez ints.add(y) et ints.remove(z) parmi de nombreuses autres méthodes pratiques que vous pouvez trouver dans les Javadocs appropriés.

Je recommande fortement d'étudier les classes Collections disponibles en Java car elles sont très puissantes et vous donnent beaucoup de fonctionnalités intégrées qui Java-débutants ont tendance à essayer de se réécrire inutilement.

 38
Author: MattGrommes, 2014-02-03 06:44:16

Les tableaux ont une taille fixe une fois instanciés. Vous pouvez utiliser une liste à la place.

Autoboxing rend une liste utilisable similaire à un tableau, vous pouvez y mettre simplement des valeurs int:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
 26
Author: Mnementh, 2010-03-11 16:25:44

Je suis en désaccord avec les réponses précédentes suggérant ArrayList, parce que ArrayList est pas un Tableau Dynamique, mais une Liste soutenue par un tableau. La différence est que vous ne pouvez pas faire ce qui suit:

ArrayList list = new ArrayList(4);
list.put(3,"Test");

Cela vous donnera une IndexOutOfBoundsException car il n'y a pas encore d'élément à cette position même si le tableau de sauvegarde permettrait un tel ajout. Vous devez donc utiliser une implémentation de tableau extensible personnalisée comme suggéré par @ randy-lance

 12
Author: cspann, 2013-07-01 07:18:57
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below 

public class DynamicArray {
 static   int []increaseSizeOfArray(int []arr){
          int []brr=new int[(arr.length*2)];
          for (int i = 0; i < arr.length; i++) {
         brr[i]=arr[i];     
          }
          return brr;
     }
public static void main(String[] args) {
     int []arr=new int[5];
      for (int i = 0; i < 11; i++) {
          if (i<arr.length) {
              arr[i]=i+100;
          }
          else {
              arr=increaseSizeOfArray(arr);
              arr[i]=i+100;
          }        
     }

for (int i = 0; i < arr.length; i++) {
     System.out.println("arr="+arr[i]);
}    
}

}

Source : Comment faire un tableau dynamique

 11
Author: Anuj Dhiman, 2019-11-28 10:14:00
  1. Il est recommandé d'utiliser la Liste de traiter de petite taille.

  2. Si vous avez un grand nombre de nombres, N'utilisez JAMAIS List et autoboxing,

    Liste liste

Pour chaque int, un nouvel entier est créé automatiquement. Vous constaterez qu'il devient lent lorsque la taille de la liste augmente. Ces entiers sont des objets inutiles. Dans ce cas, il serait préférable d'utiliser une taille estimée,

int[] array = new int[ESTIMATED_SIZE];
 7
Author: Hao Deng, 2014-12-13 20:58:05

Que diriez-vous d'utiliser un List à la place? Par exemple, ArrayList<integer>

 4
Author: Konrad Garus, 2010-03-11 16:24:43

Vous ne pouvez pas modifier la taille d'un tableau. Vous pouvez cependant créer un nouveau tableau avec la bonne taille et copier les données de l'ancien tableau vers le nouveau.

, Mais votre meilleure option est d'utiliser IntList de jacarta communes. (ici)

Cela fonctionne comme une liste mais prend moins d'espace et est plus efficace que cela, car il stocke des int au lieu de stocker des objets wrapper sur des int (c'est ce qu'est la classe Integer).

 4
Author: Thiago Chaves, 2013-07-01 04:23:16

J'ai répondu à cette question et non vous n'avez pas besoin d'une arraylist ou de toute autre chose c'était une affectation et je l'ai terminée donc oui les tableaux peuvent augmenter en taille. Voici le lien Comment utiliser Java Dynamique de la Matrice et voici le lien pour ma question que j'ai répondu Tableaux dynamiques Java

 -4
Author: Nobody, 2017-05-23 11:47:01