假设我有一个包含以下实例变量的Movie类:
private String myTitle; // title of Bond film
private String myBondActor; // name of actor who portrayed James Bond
private int myYear; // year film was released
private double myFilmRating;// from all-reviews.com
private int myLengthHours; // hours (truncated) portion of film length
private int myLengthMinutes;// minutes beyond truncated hours
我有ArrayList
个Movie
个对象,我使用冒泡排序算法对ArrayList
进行排序:
public void bubbleSort(ArrayList<Movie> list) {
for (int outer = 0; outer < list.size() - 1; outer++) {
for (int inner = 0; inner < list.size() - outer - 1; inner++) {
if (list.get(inner).compareTo(list.get(inner + 1)) > 0) {
Movie temp = list.get(inner);
list.set(inner, list.get(inner + 1));
list.set(inner + 1, temp);
}
}
}
ArrayList
如何排序?
答案 0 :(得分:2)
查看当你执行int x = 5,y = 10时,我们现在可以将它们比作x<y, we can compare two variables, but how do we compare two objects ??
我们通过compareTo()比较对象,您的Movie类必须实现 Comparable 接口才能将其对象相互比较。
您必须为compareTo()方法提供实现,此条件将决定哪个对象大于另一个。
例如,让我们说一部电影应该根据电影中的my myYear(发行年份)进行排序(比较),以便实施
public int compareTo(Movie other)
{
return this.myYear - other.getMyYear();
}
现在我们创建两个类型为Movie的m1和m2对象,其中m1.myYear = 2000和m2.myYear = 2001
当我们m1.compareTo(m2);
在这里,我根据myYear 决定哪个Movie对象比另一个更大,你可能会决定其他可能更多的条件。 无论条件如何,请记住您返回的数字+ ve,-ve或0(零)将决定哪个对象大于另一个。
答案 1 :(得分:1)
您必须自己实施Comparable界面和compareTo()
方法 ,以便使用对象属性进行比较(例如标题,年份等)< / p>
int compareTo(T o)
将此对象与指定的订单对象进行比较。返回一个 负整数,零或正整数,因为此对象较少 比,等于或大于指定的对象。
请注意与关联性等相关的各种警告。
我认为你自己写的那种,作为一种练习。您可以使用实现QuickSort的Collections.sort()
,此方法允许使用可选的Comparator对象,它允许您实现不同的比较(例如,您可以按名称,按演员姓名,按发布日期等进行排序。通过在不同的比较器中代替)
答案 2 :(得分:0)
实施Comparable
界面:
class Movie implements Comparable
{
private String myTitle;
private String myBondActor;
private int myYear;
private double myFilmRating;
private int myLengthHours;
private int myLengthMinutes;
// Override CompareTo Method
public int compareTo ( Movie m )
{
// Here comparison logic
}
}
现在只需调用这样的方法:
Collections.sort(list);