如何使用Java对大数据进行排序?

时间:2018-11-18 09:41:39

标签: java

我已经用Java创建了一个名为Music的项目,并且在NetbeansProjects中有一个名为music.txt的文件,我想对所有数据进行排序,例如歌手,歌曲名称,年份,持续时间(以分钟为单位)和流派到音乐项目中。

我使用了collections.sort,但是为此我复制并粘贴了所有数据并写道:

list.add(new Music("Justin Timberlake", "Cry me a river", 2003, 4, "Pop")
list.add(new Music("Mariah Carey", "One sweet day", 1996, 2, "R&B")

然后

collections.sort(list);

然后使用for循环,因为列表小于i,所以每次都会增加i。

但是有大约600行音乐,是否有更快的方法来按字母顺序对音乐进行排序,以及从最早到最新的年份?我是Java的初学者,因此有点困惑。

2 个答案:

答案 0 :(得分:0)

Java提供了Collection.sort(...)方法,因为它很有效!如果要选择排序标准,则必须实现比较器或比较标准。 您可以通过两种方式执行此操作:

第一个方法是在Music类中添加一个方法“ compareTo”。

public int compareTo(Contact other) {
    return name.compareTo(other.name); //for example...
}

,因此致电Collections.sort(list)

现在第二个:您可以定义一个外部可控制的顺序:

// Now sort by year instead of name (default).
Collections.sort(list, new Comparator<Music>() {
    public int compare(Music one, Music two) {
        return one.getYear().compareTo(two.getYear());
    }
}); 

之后,您的列表将按名称或年份进行排序,您可以按顺序获取所有Music对象。

例如:

list.add(new Music("Justin Timberlake", "Cry me a river", 2003, 4, "Pop")
list.add(new Music("Mariah Carey", "One sweet day", 1996, 2, "R&B")

//sorting list
Collections.sort(list, new Comparator<Music>() {
    public int compare(Music one, Music two) {
        return one.getYear().compareTo(two.getYear()); //by year
    }
});

//now see the result
for(Music m: list)
    System.out.println(m.toString());

您的输出将是

  

[“ Mariah Carey”,“一个甜蜜的日子”,1996,2,“ R&B”]

     

[“ Justin Timberlake”,“ Cry me a river”,2003,4,“ Pop”]

答案 1 :(得分:0)

您可以简单地使用Java标准类库进行排序。这些方法非常有效,并且不算600种。所以尝试这样的事情:

List<Music> list = ...;
list.sort(comparing(Music::getName);

这按名称排序。

或者用拳头按名称排序,然后按年份排序(如果名称相同):

list.sort(comparing(Music::getName).thenComparing(Music::getYear));

方法comparing是类java.util.Comparator的静态导入。