冒泡排序日历
Bubblesorting Calendars
我在按日期对 Calendar
进行冒泡排序时遇到了一些问题,我不确定我的代码有什么问题。
首先:我有一个 class(名为 Note
),其中包含多个变量和方法,其中一个变量是 Calendar
.
然后我有一个名为 list
的 ArrayList<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
而不是列表,这样您的数据将始终排序
我在按日期对 Calendar
进行冒泡排序时遇到了一些问题,我不确定我的代码有什么问题。
首先:我有一个 class(名为 Note
),其中包含多个变量和方法,其中一个变量是 Calendar
.
然后我有一个名为 list
的 ArrayList<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
而不是列表,这样您的数据将始终排序