247 votes

Java : liste inversée

Je veux avoir une liste inversée vue sur une liste (d'une manière similaire List#sublist fournit une sous-liste de la vue sur une liste). Est-il une fonction qui fournit cette fonctionnalité?

Je ne veux pas faire toute sorte de copie de la liste ou modifier la liste.

Il suffirait, si je pouvais obtenir au moins un itérateur inverse, sur une liste dans ce cas.


Aussi, je sais comment mettre en œuvre cette moi-même. Je demande juste si Java fournit déjà quelque chose comme cela.

Démonstration de mise en œuvre:

static <T> Iterable<T> iterableReverseList(final List<T> l) {
    return new Iterable<T>() {
        public Iterator<T> iterator() {
            return new Iterator<T>() {
                ListIterator<T> listIter = l.listIterator(l.size());                    
                public boolean hasNext() { return listIter.hasPrevious(); }
                public T next() { return listIter.previous(); }
                public void remove() { listIter.remove(); }                 
            };
        }
    };
}

J'ai juste trouvé que quelques - List implémentations ont descendingIterator() ce dont j'ai besoin. S'il n'est pas général, ce type de mise en œuvre pour l' List. Ce qui est étrange parce que la mise en œuvre que j'ai vu en LinkedList est assez générale pour travailler avec n'importe quel List.

242voto

jcalvert Points 1079

Utilisez la méthode .clone() sur votre liste. Il retourne une copie superficielle, ce qui signifie qu’il contient des pointeurs vers les mêmes objets, donc vous n’aurez pas à copier la liste. Ensuite il suffit d’utiliser Collections.

Ergo,

237voto

ColinD Points 48573

Goyave donne ceci: Listes.reverse(List)

List<String> letters = ImmutableList.of("a", "b", "c");
List<String> reverseView = Lists.reverse(letters); 
System.out.println(reverseView); // [c, b, a]

Contrairement aux Collections.reverse, c'est purement une vue... il ne modifie pas l'ordre des éléments dans la liste d'origine. En outre, avec une liste d'origine est modifiable, des modifications à l'original de la liste et la vue sont reflétées dans l'autre.

84voto

Shakeeb Ayaz Points 2099

Si j’ai compris alors c’est une ligne de code correct. Cela a fonctionné pour moi.

46voto

kkress Points 459

Son pas vraiment élégant, mais si vous utilisez List.listIterator (int index), vous pouvez obtenir un ListIterator bidirectionnel à la fin de la liste :

8voto

Bozho Points 273663

a - si votre est un , vous pouvez l’utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X