根据照片属性按字母顺序排列照片阵列列表



我已经在网站上搜索,找到了许多资源,没有一个回答这个问题。考虑在投票或标记重复之前阅读。

我不能使用比较器接口或.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

有两种可能性:

  1. 照片类将实现可比较的接口,您将在照片类中实现compareTo方法。然后,您只需要致电Collections.sort(photoAlbum);

  2. 您将实现自己的比较器并致电Collections.sort(photoAlbum, comparator);。这样,您就无需修改照片类。

编辑:如果您不能使用此功能,只需实现您喜欢的排序算法即可。或查看Java实现排序功能。

最新更新