为什么collections.sort在Java中通过比较器排序时会抛出不支持的操作异常?

时间:2014-02-18 12:47:58

标签: java sorting collections arraylist

以下是我用于按预定义顺序对列表进行排序的代码。 itemsSorted列表中提到了定义的顺序。

final List<String> itemsSorted = myMethod.getSortedItems();

List<String> plainItemList = myMethod2.getAllItems();

final Comparator<String> comparator = new Comparator<String>() {        

    public int compare(String str1, String str2) {
        return orderOf(str1) - orderOf(str2);
    }

    private int orderOf(String name) {          
        return ((itemsSorted)).indexOf(name);
    }
 };
 Collections.sort(plainItemList, comparator);
 return plainItemList;

以上代码抛出

Caused by: java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableList$1.set(Collections.java:1244)
    at java.util.Collections.sort(Collections.java:221)

我不确定列表为何无法修改。请帮帮我。

1 个答案:

答案 0 :(得分:51)

该列表不可修改,显然您的客户端方法正在创建一个不可修改的列表(使用例如Collections#unmodifiableList等)。只需在排序前创建一个可修改的列表:

List<String> modifiableList = new ArrayList<String>(unmodifiableList);
Collections.sort(modifiableList, comparator);