Je me demandais comment initialiser un tableau d'entiers de sorte que sa taille et ses valeurs changent tout au long de l'exécution de mon programme, des suggestions?
Je me demandais comment initialiser un tableau d'entiers de sorte que sa taille et ses valeurs changent tout au long de l'exécution de mon programme, des suggestions?
Réponses:
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 modifier la taille, vous devez créer un nouveau tableau et copier les données souhaitées - 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, ainsi que d'autres outils utiles. Vous voudrez vérifier l'API Java 6 pour une liste complète d'entre eux.
Une 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, l' autoboxing / l'autounboxing s'en chargera pour vous en silence, mais vous pourriez avoir un comportement étrange en fonction de ce que vous faites.
size
mesure que le programme continue; il obtient la taille qui se trouve size
lorsque cette ligne est exécutée.
null
à la fin. Des idées pourquoi?
Les tableaux en Java sont de taille fixe. Ce dont vous avez 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]
tu utilises
List<Integer> ints = new ArrayList<Integer>();
Ensuite, pour changer la liste que vous utilisez ints.add(y)
etints.remove(z)
parmi de nombreuses autres méthodes pratiques, 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 offrent beaucoup de fonctionnalités intégrées que les débutants en Java ont tendance à essayer de se réécrire inutilement.
List<Integer>
place de ArrayList<Integer>
?
Les tableaux ont une taille fixe une fois instanciés. Vous pouvez utiliser une liste à la place.
L'autoboxing rend une liste utilisable similaire à un tableau, vous pouvez y mettre simplement des int-values:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Je ne suis pas d'accord avec les réponses précédentes suggérant ArrayList
, car ce ArrayList
n'est pas un tableau dynamique mais une liste soutenue par un tableau. La différence est que vous ne pouvez pas effectuer les opérations suivantes:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Il vous donnera une IndexOutOfBoundsException car il n'y a pas encore d'élément à cette position, même si le tableau de sauvegarde permettrait une telle addition. Vous devez donc utiliser une implémentation Array extensible personnalisée comme suggérée par @ randy-lance
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]);
}
}
}
Il est recommandé d'utiliser List pour traiter les petites tailles.
Si vous avez un grand nombre de nombres, n'utilisez JAMAIS la liste et l'autoboxing,
Liste <Integer> liste
Pour chaque entier, un nouvel entier est créé automatiquement. Vous constaterez que cela devient lent lorsque la taille de la liste augmente. Ces nombres 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];
Que diriez-vous d'utiliser un à la List
place? Par exemple,ArrayList<integer>
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 à partir de jacarta commons. ( ici )
Cela fonctionne comme un List mais prend moins d'espace et est plus efficace que cela, car il stocke les int au lieu de stocker les objets wrapper sur les int (c'est ce qu'est la classe Integer).
J'ai répondu à cette question et non vous n'avez pas besoin d'un arraylist ou de toute autre chose, c'était une mission et je l'ai complétée donc oui les tableaux peuvent augmenter en taille. Voici le lien Comment utiliser Java Dynamic Array et voici le lien pour ma question à laquelle j'ai répondu Java Dynamic Arrays
int[] array = new int[size];
size
est une variable, mais la longueur d'un tableau doit être fixe, ai-je raison? @Lord Torgamus