当前位置: 首页 > 面试题库 >

如何排序CopyOnWriteArrayList

司寇高洁
2023-03-14
问题内容

我想排序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中按降序排序? 问题答案: 这是您的一种方式list: 或者,您可以实施自己的排序并消除相反的步骤: 甚至更简单地使用,因为您只需要反转:

  • 问题内容: 使用时,我找不到任何排序结果的方法 就我而言,我想按.Ports订购 如何订购结果? 问题答案: 列出容器 格式 概要 显示容器及其命令 在表格中显示带有标签的容器 在表中显示带有节点标签的容器

  • 我想探讨我对桶排序的分析,如下所示 有许多方法可以实现桶排序。其中一些如下 类型1: 如果 时间: O(N) 空间: O(1) 类型2: 示例:按age age对一个人数组进行排序与用于排序的任意整数有些不同。正因为如此,它的范围[0-150]很小(所有人的年龄都在0-150之间)。因此,最快的排序方法是分配151个链表(让我们称之为桶),并根据每个人的年龄将其数据结构放入桶中: 时间:O(N K

  • 我写了一个合并两个已经排序的链表的方法。然而,由于某种原因,列表的最后一个节点没有打印出来。有什么想法吗? 下面是链接列表的合并排序方法。

  • 问题内容: 我正在尝试按其类型为time.Time的成员在Go中对结构进行排序。结构如下。 我具有以下用于排序的功能 映射定义如下 在地图填充值之后,按值对地图进行排序如下 问题是结果没有排序,谁能告诉我问题是什么。 问题答案: 在我看来,它看起来像是: 输出:

  • 问题内容: 我编写了以下Python代码: 现在我明白了: 它以哪种方式订购? 它可能会帮助您获得我的ls -l输出: 它不是按文件名或大小排序的。 相关链接:, 问题答案: 它可能根本没有排序,而是使用条目在文件系统中出现的顺序,即使用时获得的顺序。(至少在我的机器上,这产生与列表匹配相同的顺序)。