簡體   English   中英

用Java中的值對自定義對象數組進行排序

[英]Sorting an array of custom objects by values in Java

我正在處理CS-101,並且只能使用單個陣列。 我有一個看起來像下面的數組:

[Song, Song, Album, Fiction, Movie, Nonfiction, Song]

這是背景的層次結構(我的任務要求):

“在頂層,您將有一個名為Library的類。Library將具有三個子類:Music,Book和Movie。Music將具有兩個子類:Song和Album。Book將具有兩個子類:Fiction和Nonfction。Movie,Fiction,非功能類,歌曲和專輯將沒有任何子類。”

我目前正在嘗試編寫一種方法,以按圖書的ISBN號對圖書進行排序。 因此,小說和非小說是我的Book類的子類,而Book類是Library的子類。

我將所有內容都保存在Library myLibrary[] = new Library[100];

我不確定如何只從書籍中檢索ISBN並對其進行排序,因為我只允許一個數組。 否則,我希望制作一系列的書籍,然后分別對它們進行排序。

我可以利用哪些提示/算法來完成此任務?

更新資料

如果需要,我可以發布更多代碼。 但是這個問題目前更多地集中在方法上。

這里的關鍵是正確設置繼承,而不是實現Comparable接口。 請參見此處的示例: Java Comaprable,然后在父類型的數組上調用.sort(在您的情況下,這將是myLibrary.sort();)這是在原始類型上進行排序的示例: 原始類型數組sort

所以

  1. 在您的子類型上實現可比
  2. 創建父類型的數組並填充它
  3. 在數組上調用sort。

祝好運!

檢查是否可行。 (當前在選項卡上,因此無法運行代碼)

[我認為排序后,您的書籍將朝着陣列的一側飽和。 請讓我知道結果]

/* book sorting is in decreasing order of ISBN, followed by non book items
The books will be at the beginning of array, other items towards the end */
Arrays.sort(myLibrary, new Comparator<Library>()
    {
        int compare(Library l1, Library l2){
            //if both are books then compare ISBN and return appropriate
            if((l1 instanceof Book) && (l2 instanceof Book)){
                Book b1=(Book)l1; Book b2=(Book)l2;
                if(b1.getISBN()<b2.getISBN) {
                    return -1;
                } else if(b1.getISBN()>b2.getISBN()) {
                    return 1;
                } else {
                    return 0;
                }
            }
            else {//if either one, or none are Book

                //if only l1 is Book, l2 is not
                if(l1 instanceof Book){
                    return 1;
                }

                //if only l2 is Book, l1 is not
                if(l2 instanceof Book){
                    return -1;
                }

                //none are Book
                return 0;
            }
        }
    }
);

干得好...

我先前的回答所述,編寫一個新的Comparator並將其用於比較Library對象。

注意:我尚未檢查null,但您應該這樣做...

class LibraryComparator implements Comparator<Library> {
    public int compare(Library l1, Library l2){
         // If Both are Book instance do the comparison
         if(l1 instanceof Book && l2 instanceof Book){
              // Assuming ISBN is a String or Long field in your class Book
              return ((Book)l1).getISBN().compareTo(((Book)l2).getISBN());
         } else {
         // Otherwise no change in ordering
              return 0;
              // You could specify sorting logic for Movie and Music here as well
         }
    }
}

然后可以對數組進行排序:

Arrays.sort(myLibrary, new LibraryComparator());

在不嘗試給出算法的實際實現的情況下,您應該執行就地排序,可以通過以下方式實現優先級:

1.書比音樂和電影優先

2.如果兩個對象是“書籍”,則優先級基於ISBN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM