如何在Java中按字母顺序组织对象数组

如何在Java中按字母顺序组织对象数组,java,arrays,sorting,object,Java,Arrays,Sorting,Object,我试图模拟一个唱片库。但我也可以按作者姓名的字母顺序组织图书馆的内容。关于如何按字母顺序组织对象数组的内容,有什么帮助吗 我创建了一个名为Album的类,用于创建对象 public class Album { private String author; private String name; private String year; public Album(String a, String n, String y) { // constructor

我试图模拟一个唱片库。但我也可以按作者姓名的字母顺序组织图书馆的内容。关于如何按字母顺序组织对象数组的内容,有什么帮助吗

我创建了一个名为Album的类,用于创建对象

public class Album  {

    private String author;
    private String name;
    private String year;

    public Album(String a, String n, String y) { // constructor

    author = a;
    name = n;
    year = y;

    }

    public String toString()
    {

        return  author +","+ name + "," + year;

    } 

}
类集合用于将对象存储到数组中

public class AlbumCollection {


    public  Album collection[]= new Album[10]; 

    private int numAlbums = 0;

    public void add (Album a){

        if (numAlbums >= collection.length){

            Album newcollection[]= new Album [collection.length * 2];

            for (int n = 0; n < numAlbums; n ++){

                newcollection[n] = collection[n];
            }

            newcollection = collection;

        }     

        collection[numAlbums] = a;

        numAlbums = numAlbums + 1;

    }

    public String toString()
    {
         String details = "";

                for ( int p = 0; p < collection.length ; p ++)

                {
                    details = details + collection[p] +  "\n" ;

                    }

                details += "\n";         

         return details;         
    }
}

我不得不将compareTo方法改为按作者排序

 public class Album  {
private String author;
private String name;
private String year;

public Album(String a, String n, String y) { // constructor

author = a;
name = n;
year = y;

}

public String toString()
{

    return  author +","+ name + "," + year;

} 

public int compareTo(Album a) {
    // usually toString should not be used,
    // instead one of the attributes or more in a comparator chain
    return author.compareTo(a.author);

}  
} 我将方法sort添加到数组的排序元素中:

public class Collection {


public  Album collection[]= new Album[10]; 

private int numAlbums = 0;

public void Add (Album a){

    if (numAlbums >= collection.length){

        Album newcollection[]= new Album [collection.length * 2];

        for (int n = 0; n < numAlbums; n ++){

            newcollection[n] = collection[n];
        }

        newcollection = collection;

    }     

    collection[numAlbums] = a;

    numAlbums = numAlbums + 1;

}

public String toString()
{
     String details = "";

            for ( int p = 0; p < numAlbums ; p ++)

            {
                details = details + collection[p] +  "\n" ;

                }

            details += "\n";         

     return details;         
}
public void sort(){
    for(int i=0;i<numAlbums;i++){
        for(int j=i;j<numAlbums-1;j++){
            if(collection[j].compareTo(collection[j+1])>0){
                Album tmp =collection[j];
                collection[j]=collection[j+1];
                collection[j+1]=tmp;
            }
        }
    }
}

如果这个问题不是以下问答的重复,那么它至少显示了如何统计:问题是我不想使用列表你必须使用列表或类似的东西
Collection
是一个接口,您不能在其上调用
new
。您想通过生成一些函数对其进行排序吗?首先,您应该遵循Java命名约定。编写自己的名为
Collection
的类真是个糟糕的主意,因为它是JDK中的一个接口。将其重命名为类似于
AlbumCollection
。您的命名方法也应该以小写开头,因此
public void Add(相册a)
必须重命名为
public void Add(相册a)
。顺便说一句,与你的问题相关的东西可以很容易地编码。
public class Collection {


public  Album collection[]= new Album[10]; 

private int numAlbums = 0;

public void Add (Album a){

    if (numAlbums >= collection.length){

        Album newcollection[]= new Album [collection.length * 2];

        for (int n = 0; n < numAlbums; n ++){

            newcollection[n] = collection[n];
        }

        newcollection = collection;

    }     

    collection[numAlbums] = a;

    numAlbums = numAlbums + 1;

}

public String toString()
{
     String details = "";

            for ( int p = 0; p < numAlbums ; p ++)

            {
                details = details + collection[p] +  "\n" ;

                }

            details += "\n";         

     return details;         
}
public void sort(){
    for(int i=0;i<numAlbums;i++){
        for(int j=i;j<numAlbums-1;j++){
            if(collection[j].compareTo(collection[j+1])>0){
                Album tmp =collection[j];
                collection[j]=collection[j+1];
                collection[j+1]=tmp;
            }
        }
    }
}
        public static void main(String[] args) {
    Collection c = new Collection();

    c.Add( new Album("DaftPunk","Discovery","2001"));
    c.Add( new Album ("Pink Floid","The Dark Side Of The Moon","1973"));
    c.Add( new Album( "The Clash", "London Calling", "1979"));
    c.sort();
    System.out.print(c);  
}