按Java中的值对自定义对象数组进行排序

时间:2012-09-21 01:04:03

标签: java sorting

我正在进行CS-101分配,只允许使用单个阵列。我有一个如下所示的数组:

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

以下是背景的层次结构(来自我的作业的要求):

  

“在顶层,你将有一个名为Library的类。图书馆将有三个子类:Music,Book和Movie。音乐将有两个子类:Song和Album。Book将有两个子类:Fiction和Non fi ction。 ,小说,非官方,歌曲,   和专辑将没有任何子类。“

我目前正在尝试编写一种方法,按照ISBN编号对书籍进行排序。因此,小说和非小说是我的Book类的子类,它是Library的子类。

我把所有内容都放在Library myLibrary[] = new Library[100];

我不知道如何从书籍中检索ISBN并对它们进行排序,因为我只允许一个数组;否则我会喜欢制作一系列书籍,然后分开排序。

我可以利用哪些提示/算法来实现这一目标?

更新

如果需要,我可以发布更多代码。但是这个问题目前更侧重于这种方法。

2 个答案:

答案 0 :(得分:1)

检查这是否有效。 (目前在标签上,因此无法运行代码)

[我认为在对你的书进行整理后,它会向阵列的一侧饱和。请让我知道结果]

/* 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;
            }
        }
    }
);

答案 1 :(得分:0)

如果不尝试给出算法的实际实现,您应该执行就地排序,其中优先级可以通过以下方式完成:

1。图书优先于音乐和电影

2. 如果两个对象是图书,则优先级基于ISBN