Comment ajouter un élément à un Tableau et shift index?
J'ai besoin d'ajouter un élément à un Tableau spécifiant la position et de la valeur.
Par exemple, j'ai de la Matrice de
int []a = {1, 2, 3, 4, 5, 6};
après l'application de addPos(int 4, int 87)
il devrait être
int []a = {1, 2, 3, 4, 87, 5};
Je comprends qu'ici, devrait être un changement de Tableau d'index, mais je ne vois pas comment l'implémenter dans le code.
Vous ne pouvez pas le changement d'index pour les tableaux en Java. Les tableaux sont de taille fixe. Créer un nouveau tableau avec les valeurs que vous voulez et de les affecter la référence " a " à nouveau tableau.
Devoirs? Si oui, le marquer comme tel.
Trop tard maintenant, comme il existe déjà un code de réponse.
Utilisation ArrayUtils.ajouter(T tableau [], int index,T)(commons.apache.org/proper/commons-lang/javadocs/api-release/org/...)
Devoirs? Si oui, le marquer comme tel.
Trop tard maintenant, comme il existe déjà un code de réponse.
Utilisation ArrayUtils.ajouter(T tableau [], int index,T)(commons.apache.org/proper/commons-lang/javadocs/api-release/org/...)
OriginalL'auteur devger | 2012-07-24
Vous devez vous connecter pour publier un commentaire.
Cela devrait faire l'affaire:
Où
a
est le tableau d'origine,pos
est la position de l'insertion, etnum
est le nombre à insérer.System.arraycopy
serait certainement être une meilleure solution.En effet. Je ne sais pas qui a été construit en.
for(int i = pos + 1; i < a.length; i++)
il devraitresult.length
pas?OriginalL'auteur
La façon la plus simple de le faire est d'utiliser un
ArrayList<Integer>
et l'utilisation de laadd(int, T)
méthode.La méthode est
add(int index, T element)
, pasinsert
.Yep! Merci man! Édité 😀
L'op a demandé spécifiquement pour un tableau.
OriginalL'auteur
Vous devez faire un nouveau tableau, utilisez
System.arraycopy
pour copier le préfixe et le suffixe, et définir un emplacement pour la nouvelle valeur.OriginalL'auteur
Je sens l'odeur de devoirs, et c'est probablement une ArrayList n'a pas le droit (?)
Au lieu de chercher un moyen de "shift index", peut-être juste de construire un nouveau tableau:
Puis
//edit: copier les valeurs de cours, pas d'index
OriginalL'auteur
Jrad solution est bonne, mais je n'aime pas qu'il n'utilise pas de tableau de copie. À L'Interne Du Système.arraycopy() fait un appel des indigènes de sorte que vous aurez un obtenir des résultats plus rapides.
OriginalL'auteur
Ici est un quasi-oneliner qui n':
OriginalL'auteur
Ont un coup d'oeil à communes. Il utilise arrayCopy(), mais a de plus agréable à la syntaxe. Pour ceux qui ont répondu à l'élément par élément de code: si ce n'est pas de devoirs, c'est trivial et la réponse intéressante est celle qui favorise la réutilisation. Pour ceux qui proposent des listes: il est probable que les lecteurs sachent parler et les problèmes de performance doivent être mentionnés.
OriginalL'auteur
À moins que je me manque quelque chose, la question n'est pas d'augmenter la taille de la matrice. Dans l'exemple, la taille de la matrice reste le même. (Comme un décalage de bits.)
Dans ce cas, il n'y a vraiment pas de raison de créer un nouveau tableau ou de le copier. Ceci devrait faire l'affaire:
OriginalL'auteur
org.apache.commons.lang3.ArrayUtils#add(T[], int, T)
est déconseillée dans les plus récents communes lang3, vous pouvez utiliserorg.apache.commons.lang3.ArrayUtils#insert(int, T[], T...)
à la place.Exemple de code:
OriginalL'auteur
Essayer cette
OriginalL'auteur
b de la matrice serait créé comme {1, 2, 3, 4, 87, 5,6};
OriginalL'auteur
System.arraycopy
est plus performant, mais difficile à obtenir en raison des indices de calculs. Mieux coller avec jrad réponse ouArrayList
si vous n'avez pas d'exigences de performance.Et JUnit4 test pour vérifier qu'il fonctionne comme prévu.
OriginalL'auteur
OriginalL'auteur
Si vous préférez l'utilisation d'Apache Commons plutôt que de réinventer la roue, l'approche actuelle est: est-ce
Il utilisé pour être ArrayUtils.ajouter(...) mais qui a été frappée il y a un moment. Plus d'infos ici: Un
OriginalL'auteur
Code suivant insère l'élément à la position spécifiée et de modifier les éléments existants de passer à côté de nouvel élément.
OriginalL'auteur