我无法对我的收藏品进行排序

时间:2017-06-06 11:58:14

标签: java sorting collections override

这是我的代码,我无法对LinkedList进行排序。

import java.util.Collections;
import java.util.LinkedList;

import org.omg.CosNaming.NameComponent;

public class Zug implements Comparable<Zug> {

    private String abfahrtzeit;
    private String zuggattung;
    private int zugnummer;
    private int fahrtzeit;

    public Zug(String zeile) {

        String[] teile = zeile.split(";");
        this.abfahrtzeit = teile[0];
        this.zuggattung = teile[1];
        this.zugnummer = Integer.parseInt(teile[2]);
        this.fahrtzeit = Integer.parseInt(teile[3]);

    }

    public String getAbfahrtzeit() {
        return abfahrtzeit;
    }

    public String getZuggattung() {
        return zuggattung;
    }

    public int getZugnummer() {
        return zugnummer;
    }

    public int getFahrtzeit() {
        return fahrtzeit;
    }

    public String toString() {
        return this.abfahrtzeit + ";" + this.zuggattung + ";" + this.zugnummer + ";" + this.fahrtzeit;
    }

  //                          This is the Problem Block

     @Override
    public int compareTo (Zug z) {

        String datei = "Zuege.dat";
        LinkedList<Zug> ll = new LinkedList<Zug>();

        Collections.sort( ll, new NameComponent() );

        ll = getDaten(datei);

        return this.fahrtzeit - z.getFahrtzeit();
    }
// End Of Problem Block

    private LinkedList<Zug> getDaten(String datei) {
        return null;
    }
}   

1 个答案:

答案 0 :(得分:0)

  • 正如RealSkeptic和matoni写的那样,你不能在compareTo(Zug z)方法中做任何其他事情,而不是将thisz - 进行比较,因为方法名称暗示。每当需要比较该集合的两个元素时,通过对集合进行排序的方法来调用compareTo(Zug z)。在该方法中加载对象列表没有任何意义。

  • 最简单的实现是

    @Override
    public int compareTo(Zug z) {
        return this.fahrtzeit - z.getFahrtzeit();
    }
    

    您可能希望使用该实现测试代码。生成一些示例Zug对象,将它们添加到List,使用Collecitons.sort()对该列表进行排序并享受结果(或者给我们一个有意义的错误消息)。

  • Java实践an elaborate example介绍了如何编写compareTo()方法。

  • 请注意,此实施 equals()一致(详见javadoc)。

  • fahrzeit排序可能不是排序对象的唯一方法,可能不应该是自然顺序。您可能应该实施Comparator(例如FahrzeitComparatorAbfahrtzeitComparator ...)以便能够按不同标准排序。请参阅此example

哦,并且:

  • 使用英文变量名重写代码可以让更多人了解您的对象应该代表什么......