[英]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
所以
祝好運!
檢查是否可行。 (當前在選項卡上,因此無法運行代碼)
[我認為排序后,您的書籍將朝着陣列的一側飽和。 請讓我知道結果]
/* 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.