首页 > 解决方案 > Java,使用比较器对 ArrayList 进行排序

问题描述

当我使用 Comparator 在作者姓名之后对库进行排序时,我只是巧合地“发现”了一些东西,它实际上工作得很好,但我不明白为什么。首先请看一下我的代码:

public class Bookshelf{
        
    Collection<Literature> shelf = new ArrayList<Literature>();
    ArrayList<Literature> unsorted = (ArrayList<Literature>)shelf;

    public void printShelf() {
        Comparator<Literature> compareBySurname= new Comparator<Literature>() {
            @Override
            public int compare(Literature o1, Literature o2) {
                return o1.author.surname.compareTo(o2.author.surname);
                
            }
        };
        
        unsorted.sort(compareBySurname);
          for (Literature c : shelf)
                System.out.println(c);
    }
}

如您所见,我正在对“未排序ArrayList”进行排序。但是在对它进行排序之后,我正在遍历集合“架子”并打印集合“架子”的元素。输出是按姓氏排序的元素列表。

为了实现我的意图,我实际上应该遍历ArrayList“未排序”并打印元素(当然这个选项也有效)。所以我的问题是,为什么第一种方法实际上也有效?:D 所以我没有直接对集合“架子”进行排序,但我得到了一个排序列表。

提前致谢!

标签: javaarraylistcomparatorcompareto

解决方案


ArrayList<Literature> unsorted = (ArrayList<Literature>)shelf;不会创建新的ArrayList. 它只是使unsorted引用ArrayList相同shelf。它们不是不同的对象。你想要类似的东西

ArrayList<Literature> unsorted = new ArrayList<>(shelf); // <-- a different List.

推荐阅读