J'ai une classe - xClass, que je veux charger dans un tableau de xClass donc je la déclaration:
xClass mysclass[] = new xClass[10];
myclass[0] = new xClass();
myclass[9] = new xClass();
Cependant, je ne sais pas si j'aurai besoin de 10. Je peux avoir besoin de 8 ou 12 ou de tout autre nombre d'ailleurs. Je ne le saurai pas avant l'exécution. Puis-je modifier le nombre d'éléments dans un tableau à la volée? Si c'est le cas, comment?
Réponses:
Non, vous ne pouvez pas modifier la taille d'un tableau une fois créé. Vous devez soit l'allouer plus grand que ce dont vous pensez avoir besoin ou accepter les frais généraux liés à la réaffectation nécessaire pour augmenter la taille. Quand c'est le cas, vous devrez en allouer un nouveau et copier les données de l'ancien vers le nouveau:
Si vous vous trouvez dans cette situation, je vous recommande vivement d'utiliser les collections Java à la place. En particulier,
ArrayList
encapsule essentiellement un tableau et prend en charge la logique de croissance du tableau selon les besoins:En général, une
ArrayList
solution est préférable à un tableau de toute façon pour plusieurs raisons. D'une part, les tableaux sont mutables. Si vous avez une classe qui fait cela:vous avez créé un problème car un appelant peut modifier votre membre de données privées, ce qui conduit à toutes sortes de copies défensives. Comparez cela à la version List:
la source
En java, la longueur du tableau est fixe.
Vous pouvez utiliser une liste pour contenir les valeurs et appeler la
toArray
méthode si nécessaire. Consultez l'exemple suivant:la source
Comme d'autres l'ont dit, vous ne pouvez pas modifier la taille d'un tableau Java existant.
ArrayList est le plus proche de Java standard d'un tableau de taille dynamique. Cependant, il y a certaines choses à propos de ArrayList (en fait l'interface de liste) qui ne sont pas "comme un tableau". Par exemple:
[ ... ]
pour indexer une liste. Vous devez utiliser les méthodesget(int)
etset(int, E)
.set(15, foo)
.add
,insert
et desremove
méthodes.Si vous voulez quelque chose de plus semblable à un tableau, vous devrez concevoir votre propre API. (Peut-être que quelqu'un pourrait intervenir avec une bibliothèque tierce existante ... Je n'ai pas pu en trouver une avec 2 minutes de "recherche" avec Google :-))
Si vous n'avez vraiment besoin que d'un tableau qui grandit au fur et à mesure que vous l'initialisez , la solution est quelque chose comme ça.
la source
Vous définissez le nombre d'éléments sur tout ce que vous voulez au moment où vous le créez:
Ensuite, vous pouvez initialiser les éléments dans une boucle. Je suppose que c'est ce dont vous avez besoin.
Si vous avez besoin d'ajouter ou de supprimer des éléments au tableau après l'avoir créé, vous devez utiliser un fichier
ArrayList
.la source
Vous pouvez utiliser ArrayList:
...
la source
Arrays.copyOf()
La méthode a de nombreuses options pour résoudre le problème avec l'augmentation dynamique de la longueur du tableau.API Java
la source
Oui, enveloppez-le et utilisez le framework Collections.
Utilisez ensuite List.toArray () si nécessaire, ou parcourez simplement cette liste.
la source
Comme le disent d'autres utilisateurs, vous avez probablement besoin d'une implémentation de java.util.List.
Si, pour une raison quelconque, vous avez finalement besoin d'un tableau, vous pouvez faire deux choses:
Utilisez une liste puis convertissez-la en tableau avec myList.toArray ()
Utilisez un tableau d'une certaine taille. Si vous avez besoin de plus ou moins de taille, vous pouvez la modifier avec les méthodes java.util.Arrays.
La meilleure solution dépendra de votre problème;)
la source
Je recommande d'utiliser des vecteurs à la place. Très facile à utiliser et dispose de nombreuses méthodes de mise en œuvre prédéfinies.
pour ajouter un élément utilisez simplement:
Dans le (5,2), le premier 5 est la taille initiale du vecteur. Si vous dépassez la taille initiale, le vecteur augmentera de 2 places. S'il dépasse à nouveau, il augmentera à nouveau de 2 places et ainsi de suite.
la source
Où vous déclarez le tableau myclass [] comme:
, transmettez simplement comme argument le nombre d'éléments XClass dont vous aurez besoin. À ce stade, savez-vous de combien vous en aurez besoin? En déclarant le tableau comme ayant 10 éléments, vous ne déclarez pas 10 objets XClass, vous créez simplement un tableau avec 10 éléments de type xClass.
la source
Les tailles des tableaux Java sont fixes, vous ne pouvez pas créer de tableaux dynamiques comme celui de C ++.
la source
Il est recommandé d'obtenir la quantité que vous devez d'abord stocker, puis d'initialiser la baie.
par exemple, vous demanderiez à l'utilisateur combien de données il a besoin de stocker, puis l'initialisez, ou interrogez le composant ou l'argument sur le nombre de données à stocker. si vous voulez un tableau dynamique que vous pouvez utiliser
ArrayList()
et utiliser uneal.add();
fonction pour continuer à ajouter, vous pouvez le transférer dans un tableau fixe.cela est redondant, mais juste pour vous montrer l'idée,
ArrayList
peut contenir des objets contrairement aux autres types de données primitifs et est très facile à manipuler, supprimer tout ce qui se trouve au milieu est également facile, complètement dynamiqueList
.Stack
la source
Je ne sais pas si vous pouvez modifier la taille au moment de l'exécution, mais vous pouvez allouer la taille au moment de l'exécution. Essayez d'utiliser ce code:
cela affecte la taille de votre tableau à celle entrée au moment de l'exécution dans x.
la source
Voici une méthode qui n'utilise pas ArrayList. L'utilisateur spécifie la taille et vous pouvez ajouter une boucle do-while pour la récursivité.
la source
Dans Java, les tailles de tableau sont toujours de longueur fixe, mais il existe un moyen d'augmenter dynamiquement la taille de la matrice lors de l'exécution elle-même.
C'est la manière la plus "utilisée" et la plus préférée de le faire.
Dans le code ci-dessus, nous initialisons un nouveau tableau temp [], et en outre, nous utilisons une boucle for pour initialiser le contenu du temp avec le contenu du tableau d'origine, c'est-à-dire. stck []. Et puis de nouveau le recopier dans l'original, nous donnant un nouveau tableau de nouveau SIZE.
Il ne fait aucun doute qu'il génère une surcharge du processeur en raison de la réinitialisation répétée d'un tableau en utilisant la boucle for. Mais vous pouvez toujours l'utiliser et l'implémenter dans votre code. Pour la meilleure pratique, utilisez "Linked List" au lieu de Array, si vous voulez que les données soient stockées dynamiquement dans la mémoire, de longueur variable.
Voici un exemple en temps réel basé sur des piles dynamiques pour AUGMENTER LA TAILLE DU TABLEAU au moment de l'exécution
Nom de fichier: DStack.java
Nom de fichier: Exec.java
(avec la classe principale)
J'espère que cela résout votre requête.
la source
Oui, nous pouvons le faire.
la source
Étant donné qu'ArrayList prend trop de mémoire lorsque j'ai besoin d'un tableau de types primitifs, je préfère utiliser IntStream.builder () pour créer un tableau int (vous pouvez également utiliser les générateurs LongStream et DoubleStream).
Exemple:
Remarque: disponible depuis Java 8.
la source
Tu peux faire quelque chose
la source