我想对CopyOnWriteArrayList进行排序。但是当我尝试运行以下代码时

它正在抛出unsorted operation exception

public class CopyOnWriteArrayListExample {

  public static void main(final String[] args) {
     List<String> list = new CopyOnWriteArrayList<>();
    list.add("3");
    list.add("2");
    list.add("1");

    Collections.sort(list);
   }
}

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.concurrent.CopyOnWriteArrayList$COWIterator.set(CopyOnWriteArrayList.java:1049)
at java.util.Collections.sort(Collections.java:159)
at com.sac.list.CopyOnWriteArrayListExample.main(CopyOnWriteArrayListExample.java:15)

提前致谢。

最佳答案

Collections.sort使用ListIterator.set

    ...
    for (int j=0; j<a.length; j++) {
        i.next();
        i.set((T)a[j]);
    }

但是CopyOnWriteArrayList的ListIterator不支持remove,set或add方法。

解决方法:
    Object[] a = list.toArray();
    Arrays.sort(a);
    for (int i = 0; i < a.length; i++) {
        list.set(i, (String) a[i]);
    }

关于java - 如何排序CopyOnWriteArrayList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28805283/

10-12 03:42