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?
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.
int[] array = new int[size];
size
est une variable, mais la longueur d'un tableau doit être fixe, ai-je raison? @Lord Torgamussize
mesure que le programme continue; il obtient la taille qui se trouvesize
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
tu utilises
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.
la source
List<Integer>
place deArrayList<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:
la source
Je ne suis pas d'accord avec les réponses précédentes suggérant
ArrayList
, car ceArrayList
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: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
la source
Source: Comment créer un tableau dynamique
la source
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,
la source
Que diriez-vous d'utiliser un à la
List
place? Par exemple,ArrayList<integer>
la source
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).
la source
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
la source