ArrayList <Integer> get/suppression de méthode
lorsque j'utilise la liste de tableaux en Java, il y a certaines choses que je ne comprends pas. Voici mon code d'initialisation:
ArrayList<Integer> list = new ArrayList <Integer> ();
list.add (0);
list.add (1);
parfois j'ai besoin de supprimer un objet par son index:
list.remove (0) //delete the object in the first box
mais parfois, je veux supprimer un objet par son contenu:
list.remove (0) //delete the object HAS Which value of 0
ce code est très ambiguë. Pour clarifier ce que je veux faire dans le code, j'ai spécifier le type comme ceci:
list.remove ((Object) 0) //delete the object which has a value of 0
Si je ne fais pas CA, le seul moyen de savoir les méthodes qui sont appelées, est de mettre le pointeur de la souris sur la méthode à voir:
java.util.Liste de tableaux.supprimer boolean (Object Object)
Java, Mais comment fait-il la différence?
est-il un pointeur de méthode?
Est-il moins ambigu façon de le faire?
merci beaucoup, désolé pour mon anglais.
PS: je dois dire que j'ai enfin utilisé SparseIntArray mais je suis curieusement
Vous devez vous connecter pour publier un commentaire.
Pour les statères. Liste#remove(index) renvoie l'Objet supprimé de la liste. Liste#remove(Object) retourne un booléen.
Dans ce cas spécial, cependant. vous pourriez faire .
list.remove(animal)
oulist.remove(watever)
.Chaque fois qu'il y a une ambiguïté dans Java (lorsque plusieurs signatures de méthode pourrait correspondre aux types des paramètres au moment de la compilation), à l'aide de moulages de choisir la bonne méthode est votre seul choix. Bien sûr, vous pourriez lancer les paramètres pour les variables locales avant l'invocation, mais ce n'est pas plus clair pour le lecteur, et le casting du paramètre directement là où il est utilisé est la meilleure option, à mon avis, pour la rendre claire la méthode est appelée.
Par la voie de la raison, l'API est donc ambiguë dans ce cas est que, au moment de l'API a été faite, il n'y a pas d'Auto-Boxe de sorte qu'il n'était pas possible d'écrire ambiguë code en premier lieu. Cependant, la modification de la méthode pour le faire sans ambiguïté aurait été d'une modification de rupture. Depuis de stocker un Entier dans une liste de tableaux n'est pas que les grandes d'une idée de toute façon la plupart du temps, ils ont décidé de nous faire vivre avec que des ennuis.
Si c'est juste l'ambiguïté avec la méthode remove() en Entier ArrayList vous dérange, vous pouvez étendre la liste de tableaux pour mettre en œuvre votre propre :
Vous pouvez utiliser
list.remove(new Integer(0))
sûrement supprimer l'objet