基于Photo属性按字母顺序排序Photo ArrayList

时间:2014-03-07 04:33:28

标签: java sorting arraylist

我已经搜索过该网站,找到了很多资源,但都没有回答这个问题。考虑在投票前进行阅读或将其标记为重复。

我不能使用比较器接口或.sort()

我有一个名为“photoAlbum”的Photo对象的ArrayList,如ArrayList<Photo> photoAlbum = new ArrayList<Photo>();,其中每个Photo对象都包含一个名为photographerName的String属性。我需要使用photographerName属性按字母顺序对Photo对象进行排序。我知道我可以使用冒泡排序或交换排序,但是如何根据每个照片photoAlbum属性在photographerName ArrayList中对照片对象进行实际排序?

只是提示或通用示例将令人难以置信地受到赞赏。

PS我不允许使用Comparator界面或.sort方法。

3 个答案:

答案 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)

有两种可能性:

  1. Photo类将实现Comparable接口,您将在Photo类中实现compareTo方法。然后,您只需致电Collections.sort(photoAlbum);

  2. 您将实施自己的Comparator并致电Collections.sort(photoAlbum, comparator);。这样,您无需修改​​Photo类。

  3. 编辑:如果你不能使用它,只需实现你最喜欢的排序算法。或者看一下排序函数的Java实现。