La suppression d'un nombre Entier à partir d'une Liste<Integer>

Voici un beau piège j'ai juste rencontré.
Tenir compte d'une liste d'entiers:

List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(6);
list.add(7);
list.add(1);

Toute supposition sur ce qui se passe lorsque vous exécutez list.remove(1)? Qu'en est list.remove(new Integer(1))? Cela peut provoquer quelques vilains bugs.

Quelle est la bonne façon de différencier les remove(int index), qui supprime un élément de donnée de l'indice et remove(Object o), qui supprime un élément de référence, lorsqu'ils traitent avec des listes d'entiers?


Le principal point à considérer ici est celui @Nikita mentionné - exacte correspondance des paramètres prend la priorité sur l'auto-boxing.

Un: le vrai problème ici est que quelqu'un dans le Soleil un peu pensé avoir (immuable) classes wrapper autour de primitives était intelligent et plus tard, quelqu'un a pensé que le fait d'avoir de l'auto-(onu), la boxe a été encore plus intelligent... ET QUE les GENS continuent à l'AIDE de LAME par DÉFAUT de l'Api, LORSQUE toutes CELLES qui EXISTENT. Pour beaucoup de buts il y a mieux la solution que new Arraylist<Integer>. Par exemple Trove prévoit des choses un TIntArrayList. Plus je programme en Java (SCJP depuis 2001), la moins-je utiliser les classes wrapper et le plus-je utiliser des Api bien conçues (Mine, Google, etc. vient à l'esprit).

OriginalL'auteur Yuval Adam | 2010-12-26