這是ㄚ琪在是深入淺出 Java 程式設計 第二版第十六章的集合與泛型中的一個練習,這個練習主要是練習Comparator的使用,但是跟前文使用的ArrayList有點不同,這個練習改用LinkedList來測試。
ㄚ琪功力還算不錯,一樣照葫蘆寫了一隻程式,答案在p.577
可是如果在Java 1.6.0_29下編譯,發現會有
SortMountains.java:3: type LinkedList does not take parameters
這樣的錯誤,ㄚ琪注意到課本是使用Java 5.0
去查手冊
在1.4.2的版本中類別定義:
- public class LinkedList
- extends AbstractSequentialList
- implements List, Cloneable, Serializable
在1.5.0的版本中類別定義:
public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Queue<E>, Cloneable, Serializable
在1.6版本中類別定義又有些變化:
public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, Serializable
看到一堆很麻煩的定義,卻查不到相關的範例程式碼使用,我猜很多都是for 1.4版用的,ㄚ琪可以自行改成
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
public class SortMountains {
LinkedList mtn = new LinkedList();
class NameCompare implements Comparator {
public int compare(Mountain one,Mountain two) {
return one.name.compareTo(two.name);
}
}
class HeightCompare implements Comparator {
public int compare(Mountain one,Mountain two) {
return two.height-one.height;
}
}
public static void main(String[] args) {
new SortMountains().go();
}
public void go() {
mtn.add(new Mountain("Longs",14255));
mtn.add(new Mountain("Elbert",14433));
mtn.add(new Mountain("Maroon",14156));
mtn.add(new Mountain("Castle",14265));
System.out.println("as entered:n"+mtn);
NameCompare nc = new NameCompare();
Collections.sort(mtn,nc);
System.out.println("by name:n"+mtn);
HeightCompare hc = new HeightCompare();
Collections.sort(mtn,hc);
System.out.println("by height:n"+mtn);
}
}
class Mountain {
String name;
int height;
Mountain(String n,int h) {
name = n;
height = h;
}
public String toString() {
return name+ " "+ height;
}
}
但是還在想有沒法子只要匯入java.util.*,這樣就好呢?昨天去圖書館翻了一下書,還是沒看到,不是版本太舊,就是內容太少,沒有提到LinkedList的使用,看來還頗難的,如果有觀眾知道的話,還請告知方法,不能ㄚ琪可能會一直憂鬱下去了。