这是ㄚ琪在是深入浅出 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的使用,看来还颇难的,如果有观众知道的话,还请告知方法,不能ㄚ琪可能会一直忧郁下去了。