首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中获得列表的反转列表视图?

如何在Java中获得列表的反转列表视图?
EN

Stack Overflow用户
提问于 2010-10-19 03:45:28
回答 11查看 283.9K关注 0票数 229

我希望在列表上有一个反向的列表视图(类似于List#sublist在列表上提供子列表视图的方式)。有没有什么函数可以提供这种功能?

我不想复制列表,也不想修改列表。

不过,在这种情况下,如果我能在列表上至少获得一个反向迭代器,那就足够了。

此外,我知道如何自己实现这一点。我只是在问Java是否已经提供了类似的东西。

Demo实现:

代码语言:javascript
复制
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(); }                 
            };
        }
    };
}

我刚刚发现一些List实现有descendingIterator(),这正是我需要的。虽然没有通用的List实现。这有点奇怪,因为我在LinkedList中看到的实现足够通用,可以与任何List一起使用。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-10-19 03:50:06

Guava提供了这一点:Lists.reverse(List)

代码语言:javascript
复制
List<String> letters = ImmutableList.of("a", "b", "c");
List<String> reverseView = Lists.reverse(letters); 
System.out.println(reverseView); // [c, b, a]

Collections.reverse不同,这纯粹是一个视图...它不会改变原始列表中元素的顺序。此外,对于可修改的原始列表,对原始列表和视图的更改都会反映在另一个列表中。

票数 222
EN

Stack Overflow用户

发布于 2010-10-19 04:25:05

在列表中使用.clone()方法。它将返回一个浅拷贝,这意味着它将包含指向相同对象的指针,因此您不必复制列表。那就使用Collections吧。

因此,

代码语言:javascript
复制
Collections.reverse(list.clone());

如果您使用的是List,但无法访问clone(),则可以使用subList()

代码语言:javascript
复制
List<?> shallowCopy = list.subList(0, list.size());
Collections.reverse(shallowCopy);
票数 226
EN

Stack Overflow用户

发布于 2014-01-06 14:17:59

如果我的理解是正确的,那么这是.It为我工作的一行代码。

代码语言:javascript
复制
 Collections.reverse(yourList);
票数 79
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3962766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档