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