這是ㄚ琪在是深入淺出 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的使用,看來還頗難的,如果有觀眾知道的話,還請告知方法,不能ㄚ琪可能會一直憂鬱下去了。