冒泡排序日历

Bubblesorting Calendars

我在按日期对 Calendar 进行冒泡排序时遇到了一些问题,我不确定我的代码有什么问题。

首先:我有一个 class(名为 Note),其中包含多个变量和方法,其中一个变量是 Calendar.

然后我有一个名为 listArrayList<aboveclass>,其中包含上述 class 的多个实例。我正在尝试按每个 class 实例的日期对 list 进行排序。

这是我的代码:

for(int i = 0; i<list.size(); i++){
    for(int x=0; x < list.size() - x - 1; x++){
        if(list.get(x).date.after(list.get(x+1).date)){
            Note temp = list.get(x);
            list.set(x, list.get(x+1));
            list.set(x+1,  temp);
            System.out.println(i + " and " + x + " Switched");
        }
    }
}

虽然没有任何排序,但 System.out.println 永远不会进行。我也尝试过将 .after.before 切换,没有任何区别。

有什么我遗漏的吗?

谢谢

如果您不需要通过冒泡排序对列表进行排序,那么您可以使用 java.util.Collection.sort()

您的代码将变为:

Collections.sort(list);

但是你需要让你的class(如果我是对的Note)实现Comparable or to create a comparator.

Here 你可以找到一些例子。

尝试为您的 ArrayList 使用 Comparator

ArrayList<Note> x = new ArrayList<>();

x.sort(new Comparator<Note>() {

    @Override
    public int compare(Note o1, Note o2) {
        return o1.date.after(o2.date);
    }
});

按照这些思路应该可行,我不确定您如何访问 date 变量。

编辑:以上版本仅适用于 Java 8.

将此用于 Java 7 及更早版本。

ArrayList<Entity> x = new ArrayList<>();
Collections.sort(x, new Comparator<Entity>() {
        @Override
        public int compare(Entity o1, Entity o2) {
            return o1.date.after(o2.date);
        }
    });

首先,解决你的问题,在你的算法中,你在第二个循环中有问题 for(int x=0; x < list.size() - x - 1; x++) 你在做什么 你正在检查 x<list.size()- x-1 你应该做的是检查 x<list.size()- i-1 因为每个迭代外循环都会减少内循环的迭代次数

第二件事,就是按照其他人的建议去做,并使用 Collections.sort() 对列表进行排序,没有必要重新发明轮子。或者,您可以使用 PriorityQueue 而不是列表,这样您的数据将始终排序