这是我的代码,我无法对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;
}
}
答案 0 :(得分:0)
正如RealSkeptic和matoni写的那样,你不能在compareTo(Zug z)
方法中做任何其他事情,而不是将this
与z
- 进行比较,因为方法名称暗示。每当需要比较该集合的两个元素时,通过对集合进行排序的方法来调用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(例如FahrzeitComparator
,AbfahrtzeitComparator
...)以便能够按不同标准排序。请参阅此example。
哦,并且: