我已经在网站上搜索,找到了许多资源,没有一个回答这个问题。考虑在投票或标记重复之前阅读。
我不能使用比较器接口或.sort()
我有一个名为" Photoalbum"的照片对象的数组列表,例如此ArrayList<Photo> photoAlbum = new ArrayList<Photo>();
,其中每个照片对象包含一个名为photographerName
的字符串属性。我需要使用photographerName
属性按字母顺序排序照片对象。我了解我可以使用气泡排序或交换排序,但是我该如何基于每张照片photographerName
属性的photoAlbum
ArrayList内部对照片对象进行分类?
只是提示或通用示例将是令人难以置信的。
ps我不允许使用Comparator
接口或.sort
方法。
尝试以下:
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;
}
}
}
}
}
您可以创建方法
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)
comparephotos将返回负面如果photo1.photographerName
小于photo2.photographerName
, 0 如果它们等于,并且A position 如果photo1.photographerName
大于photo2.photographerName
有两种可能性:
-
照片类将实现可比较的接口,您将在照片类中实现
compareTo
方法。然后,您只需要致电Collections.sort(photoAlbum);
-
您将实现自己的比较器并致电
Collections.sort(photoAlbum, comparator);
。这样,您就无需修改照片类。
编辑:如果您不能使用此功能,只需实现您喜欢的排序算法即可。或查看Java实现排序功能。