2010-11-24 3 views
-1

Salut J'ai une question que dans le code ci-dessous faut-il écrire n--;?diminuer la taille d'un arraylist

 int n = pointList.size(); 
    for(int i=pointList.size()-1;i>=0;i--){ 
     for(int j=0;j<list.size();j++){ 
      if(pointList.get(i).equals(list.get(j))){ 
       pointList.remove(i); 
       n--; 
      } 
     } 
    } 

La liste est également une liste de tableaux. merci.

+4

mec, vous devez écrire plus d'informations sur ce que vous voulez. – Seva

+0

vous devez arrêter la boucle sur 'j' après avoir supprimé l'élément' ith', car vous accéderez à l'élément 'ith' de' pointList' dans l'itération suivante de la boucle interne ('j') ... –

Répondre

6

ArrayList est soutenu par un tableau qui commence à une taille fixe et est seulement redimensionné s'il a besoin d'une plus grande taille. Pour autant que je sache, vous ne pouvez réduire la taille du magasin de support de ArrayList en utilisant trimToSize()

Si la taille du magasin est important, pensez à utiliser un LinkedList à la place.

Note:

Si je lis votre code correctement, vous pouvez remplacer tout le code affiché avec juste ceci:

pointList.removeAll(list); 
+0

Vous ne le lisez pas correctement. liste et pointList sont des choses différentes. –

+2

@Paul: Comment ça? À partir des noms de variables, les deux sont des listes, et de la [documentation] (http://download.oracle.com/javase/6/docs/api/java/util/Collection.html#remove%28java.lang.Object% 29) de la méthode 'remove' de' Collection', il utilise cette logique pour les comparer: '(o == null? Get (i) == nul: o.equals (get (i)))' – Powerlord

+2

@Paul : Qu'entendez-vous par "différentes choses". Les éléments de la liste sont tous du même type. Et il veut supprimer tous les éléments de la liste de points qui est dans la liste ... – scheffield

0

Non, vous n'avez pas, puisque n n'est jamais lu nulle part. Je crois qu'il s'agit d'une relique précédente, où le développeur a ajouté ceci pour utiliser n dans une instruction debug.print ou dans une assertion.

+1

Je pense qu'il y a une utilisation implicite de n plus loin. Mais puisque pointlist.size retournera la taille ajustée (sauf si bizarrement implémenté, "remove" ajustera la taille) il n'y a pas besoin de le suivre via l'utilisation de n. –

+0

D'où vient le -1? Et pourquoi? – Daniel

0

Puisqu'il n'y a pas vraiment de question ici, je vais essayer de deviner. Ma conjecture est que la déclaration de int n = pointList.size(); est redondante. Puisque vous aurez toujours pointList, il connaîtra sa taille. Aussi, je suis prêt à parier que cela va jeter une exception de modification simultanée.

0

Parce que le ArrayList diminuera sa taille chaque fois que vous retirez un article que vous n'utilisez pas du tout.

si vous effectuez les opérations suivantes après chaque itération, il atteindra le même résultat:

pointList.remove (pointList.size() - 1);

Le -1 est là parce que de toute évidence les tableaux commencent par 0.

0

Ok, je suppose que vous voulez garder la taille du PointList stocké dans n jusqu'à ce jour. Dans ce cas, vous devez diminuer n. Mais vous pouvez simplement assigner n après le double pour la boucle.

+0

Pourquoi quelqu'un at-il déprécié cela?C'est complètement correct. Je viens juste de l'augmenter pour le ramener à zéro. – Jay

Questions connexes