2014-03-07 161 views
0

我已經通過網站搜索,找到許多資源,其中沒有任何回答這個問題。考慮在投票或標記爲重複之前閱讀。按照照片屬性的字母順序排列照片ArrayList

我不能用一個比較接口或.sort()

我有一個名爲「畫冊」像這樣ArrayList<Photo> photoAlbum = new ArrayList<Photo>();其中每個照片對象包含一個名爲photographerName一個String類型的屬性被攝物體的ArrayList。我需要按照photographerName屬性的字母順序對照片對象進行排序。我知道我可以使用冒泡排序或交換排序,但是我怎麼能根據每個照片的photographerName屬性來根據photoAlbum ArrayList排序照片對象本身?

只是提示或通用的例子將不可思議地讚賞。

PS我不允許使用Comparator接口或.sort方法。

+1

你有多努力嘗試自己搜索重複項?我相信這是http://stackoverflow.com/questions/1206073/sorting-a-collection-of-objects的重複,是的,我確實讀過你的問題和那個。 –

+0

我不允許實現比較器接口。 – Chizx

+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; 
     } 
    } 
    } 
} 
    } 
+0

咳嗽:比較器 slipperyseal

+0

我正在尋找實際的排序算法,我不能使用'.sort()'。這是大學課程。 – Chizx

+0

檢查編輯的答案傳遞你的ArrayList對象來代替數組。 –

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) 

comparePhotos將返回如果photo1.photographerName小於photo2.photographerName,如果他們等於,和正數 if photo1.photographerName大於photo2.photographerName

+1

大聲笑。如何在沒有比較器的情況下使用比較器。 +1讓我微笑。 –

0

有兩種可能性:

  1. 照片類將實現Comparable界面,你將實現照片級compareTo方法。然後您只需致電Collections.sort(photoAlbum);

  2. 您將實施自己的Comparator並致電Collections.sort(photoAlbum, comparator);。這樣,你不需要修改Photo類。

編輯:如果你不能使用這個,只實現你最喜歡的排序算法。或者查看一下排序函數的Java實現。