用Java反转泛型集合

Mr.*_*cky -1 java generics collections reverse

我有以下任务:

"声明一个方法,期待一个Collection并在你的方法中反转它.返回给出的相同集合,不要返回一个新的集合!

static <T> void  reverse (Collection<T> collection)
Run Code Online (Sandbox Code Playgroud)

不要尝试使用Collections.reverse.它仅适用于List,而不适用于集合"

我最初的想法是以下内容:

public static <T> void reverse(Collection<T> collection){

    int size = collection.size();
    Iterator<T> iter = collection.iterator();
    Iterator<T> iter2 = collection.iterator();

    for (int i = 0; i < size / 2; i++) {
        collection.add(iter.next());
        iter2.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不断得到奇怪的例外:

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at ReverseCollection.reverse(ReverseCollection.java:16)
at ReverseCollection.main(ReverseCollection.java:25)
Run Code Online (Sandbox Code Playgroud)

知道应该怎么做吗?

Dav*_*ank 6

您想要做的事情无法完成,因为许多Collection类(例如HashSet)不允许您控制订单.

问题是Collection没有定义一般元素的顺序.例如,考虑a Set,它不保证元素的顺序.由于没有排序,因此很难定义相反的顺序.