我在Calendar
的日期之前遇到了一些麻烦,我不知道我的代码有什么问题。
首先:我有一个类(名为Note
),它包含多个变量和方法,其中一个变量是Calendar
。
然后,我有一个名为ArrayList<aboveclass>
的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
和.before
进行切换,没有什么不同。
我遗漏了什么吗?
谢谢
发布于 2015-02-03 17:35:45
如果不需要根据气泡排序对列表进行排序,则可以使用java.util.Collection.sort()
。
您的代码将变成:
Collections.sort(list);
但是,您需要使类(如果我是正确的话是Note
)实现可比的或创建一个比较器。
这里你可以找到一些例子。
发布于 2015-02-03 17:36:18
尝试为您的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);
}
});
发布于 2015-02-03 17:47:56
首先,解决您的问题,在您的算法中,您在第二循环for(int x=0; x < list.size() - x - 1; x++)
中有问题,您要做的是检查是x<list.size()- x-1
,您应该做的是检查x<list.size()- i-1
作为每一项外环减少内环的次数。
第二件事,就是按照其他人的建议去做,并且使用Collections.sort()
对你的列表进行排序--没有必要重新发明轮子。或者,您可以使用PriorityQueue
来代替list,这样您的数据将始终被排序。
https://stackoverflow.com/questions/28305046
复制相似问题