我已经搜索过该网站,找到了很多资源,但都没有回答这个问题。考虑在投票前进行阅读或将其标记为重复。
我不能使用比较器接口或.sort()
我有一个名为“photoAlbum”的Photo对象的ArrayList,如ArrayList<Photo> photoAlbum = new ArrayList<Photo>();
,其中每个Photo对象都包含一个名为photographerName
的String属性。我需要使用photographerName
属性按字母顺序对Photo对象进行排序。我知道我可以使用冒泡排序或交换排序,但是如何根据每个照片photoAlbum
属性在photographerName
ArrayList中对照片对象进行实际排序?
只是提示或通用示例将令人难以置信地受到赞赏。
PS我不允许使用Comparator
界面或.sort
方法。
答案 0 :(得分:1)
试试这个:
Collections.sort(your array list object, new comparator());
public class CustomComparator implements Comparator<Your Array List> {
@Override
public int compare(ClassObj o1, ClassObj o2) {
return String.valueOf(o1.getName()).compareTo(String.valueOf(o2.getName()));
}
}
或尝试这个逻辑:
import java.util.*;
public class BubbleSort {
public static void main(String[] args) {
String l[]={"ABCD" , "XYZ" , "DEF" , "PQR"};
BubbleSort(l);
for(int i=0; i<l.length; i++)
{
System.out.println(l[i]);
}
}
private static void BubbleSort(String[] array) {
String t;
for(int i=0; i<array.length; i++) {
for(int j=0; j<array.length-1-i; j++) {
if(array[j].compareTo(array[j+1])>0) {
t= array[j];
array[j] = array[j+1];
array[j+1] = t;
}
}
}
}
}
答案 1 :(得分:1)
您可以创建方法
public static comparePhotos(Photo a, Photo b) {
return a.photographerName.compareTo(b.photographerName);
}
然后在排序算法的任何地方,您要比较照片:
而不是这样做:
if(photo1 < photo2) //this wouldn't work
你这样做:
if(comparePhotos(photo1, photo2) < 1)
如果photo1.photographerName
小于photo2.photographerName
,则 comparePhotos将返回否定, 0 如果相等如果photo1.photographerName
大于photo2.photographerName
答案 2 :(得分:0)
有两种可能性:
Photo类将实现Comparable接口,您将在Photo类中实现compareTo
方法。然后,您只需致电Collections.sort(photoAlbum);
您将实施自己的Comparator并致电Collections.sort(photoAlbum, comparator);
。这样,您无需修改Photo类。
编辑:如果你不能使用它,只需实现你最喜欢的排序算法。或者看一下排序函数的Java实现。