Bubblesorting日历

时间:2015-02-03 17:27:03

标签: java sorting calendar bubble-sort

我在按日期排序Calendar时遇到了一些麻烦,我不确定我的代码有什么问题。

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

然后我有一个名为ArrayList<aboveclass>的{​​{1}}包含上述类的多个实例。我试图按每个类实例的日期对list进行排序。

这是我的代码:

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切换为无差异。

我有什么遗失的吗?

由于

3 个答案:

答案 0 :(得分:1)

如果您不需要按冒号排序对列表进行排序,则可以使用java.util.Collection.sort()

您的代码将变为:

Collections.sort(list);

然而,您需要制作您的课程(如果我是对的Note),请实施Comparable或创建comparator

Here你可以找到一些例子。

答案 1 :(得分:1)

尝试为Comparator使用ArrayList

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);
        }
    });

答案 2 :(得分:0)

首先,解决您的问题,在您的算法中,您在第二个循环中遇到问题 for(int x=0; x < list.size() - x - 1; x++)你在做什么,你正在检查x<list.size()- x-1你应该做的是检查x<list.size()- i-1每个itteratation外循环减少内循环的数量

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