J'ai besoin d'ajouter des éléments à une ArrayList
file d' attente, mais quand j'appelle la fonction pour ajouter un élément, je veux qu'elle ajoute l'élément au début du tableau (il a donc l'indice le plus bas) et si le tableau a 10 éléments ajoutant un nouveau entraîne la suppression de l'élément le plus ancien (celui avec l'indice le plus élevé).
Est-ce que quelqu'un a des suggestions?
remove
etadd
?arraylist stack queue whatever
vaut mieux éviter ce que vous utilisez pour ajouter au début d'un tableau et il semble que vous devriez utiliser une collection différente.Réponses:
List
a la méthodeadd(int, E)
, vous pouvez donc utiliser:Ensuite, vous pouvez supprimer le dernier élément avec:
Cependant, vous voudrez peut-être repenser vos besoins ou utiliser une structure de données différente, comme un
Queue
ÉDITER
Jetez peut-être un œil à Apache
CircularFifoQueue
:Initialisez-le simplement avec votre taille maximale:
la source
Utilisation de structures de données spécifiques
Il existe différentes structures de données qui sont optimisées pour ajouter des éléments au premier index. Cependant, sachez que si vous convertissez votre collection en l'un de ces éléments, la conversation nécessitera probablement une complexité temporelle et spatiale de
O(n)
Deque
Le JDK comprend la
Deque
structure qui offre des méthodes commeaddFirst(e)
etofferFirst(e)
Une analyse
La complexité spatiale et temporelle de l'insertion est avec la
LinkedList
constante (O(1)
). Voir la feuille de triche Big-O .Inverser la liste
Une méthode très simple mais inefficace consiste à utiliser l'inverse:
Si vous utilisez des flux Java 8, cette réponse pourrait vous intéresser.
Une analyse
O(n)
O(1)
En regardant l' implémentation JDK, cela a une
O(n)
complexité temporelle et ne convient donc qu'aux très petites listes.la source
Vous pouvez jeter un oeil à l' ajout (index int, élément E) :
Une fois que vous l'avez ajouté, vous pouvez vérifier la taille de la ArrayList et supprimer celles à la fin.
la source
Vous voudrez peut-être regarder Deque. il vous donne un accès direct au premier et au dernier élément de la liste.
la source
Ce que vous décrivez est une situation appropriée à utiliser
Queue
.Puisque vous voulez un
add
nouvel élément, etremove
l'ancien. Vous pouvez ajouter à la fin et supprimer depuis le début. Cela ne fera pas beaucoup de différence.La file d'attente a des méthodes
add(e)
etremove()
qui ajoute à la fin le nouvel élément, et supprime depuis le début l'ancien élément, respectivement.Ainsi, chaque fois que vous ajoutez un élément au,
queue
vous pouvez le sauvegarder avec unremove
appel de méthode.MISE À JOUR : -
Et si vous souhaitez fixer la taille du
Queue
, vous pouvez jeter un oeil à: -ApacheCommons#CircularFifoBuffer
Du
documentation
: -Comme vous pouvez le voir, lorsque la taille maximale est atteinte, l'ajout d'un nouvel élément supprime automatiquement le premier élément inséré.
la source
Je pense que la mise en œuvre devrait être facile, mais compte tenu de l'efficacité, vous devriez utiliser LinkedList mais pas ArrayList comme conteneur. Vous pouvez vous référer au code suivant:
la source
Java LinkedList fournit à la fois les méthodes addFirst (E e) et push (E e) qui ajoutent un élément au début de la liste.
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#addFirst(E)
la source
vous pouvez utiliser ce code
la source
Vous pouvez utiliser des méthodes de liste, supprimer et ajouter
la source
Prenons cet exemple: -
la source
Vous pouvez utiliser
Changer E avec votre type de données
Si la suppression de l'élément le plus ancien est nécessaire, vous pouvez ajouter:
avant la déclaration de retour. Sinon, la liste ajoutera votre objet au début et conservera également l'élément le plus ancien.
Cela supprimera le dernier élément de la liste.
la source
la source
J'ai eu un problème similaire, en essayant d'ajouter un élément au début d'un tableau existant, de déplacer les éléments existants vers la droite et de supprimer le plus ancien (tableau [longueur-1]). Ma solution n'est peut-être pas très performante, mais elle fonctionne pour mes besoins.
Bonne chance
la source