我正在学习java中的集合,并在理解following.It来自scjp时被卡住了(复习问题15.37)。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class WhatIsThis {
public static void main(String[] args) {
List<StringBuilder> list = new ArrayList<StringBuilder>();
list.add(new StringBuilder("B"));
list.add(new StringBuilder("A"));
list.add(new StringBuilder("C"));
Collections.sort(list, Collections.reverseOrder());
System.out.println(list.subList(1,2));
}
}选择一个正确答案。
a.程序在运行时将编译并打印以下内容: B.
b.程序在运行时将编译并打印以下内容: B,A。
c.程序将进行编译,但在运行时会抛出异常。
d.程序将不会编译。
以下是答案:
(c)类StringBuilder没有实现可比较的接口。接受比较器的sort()方法不会对元素类型提出任何这样的要求。程序会编译,但会抛出ClassCastException,因为字符串生成器对象不能以反向自然顺序进行比较。
我听不懂答案,please.Can,有人能帮帮我吗?
发布于 2011-05-12 14:40:23
你有没有看过documentation for Collections.sort
根据其元素的自然顺序将指定的列表按升序排序。列表中的所有元素都必须实现可比较接口。此外,列表中的所有元素必须相互比较(即e1.compareTo( e2 )不能为列表中的任何元素e1和e2抛出ClassCastException )。
和
抛出:
ClassCastException -如果列表包含不能相互比较的元素(例如,字符串和整数)。
这对你有帮助吗?基本上,为了对列表进行排序,sort必须将StringBuilder值相互比较-而StringBuilder中并没有声明自然的比较。
发布于 2011-05-12 14:43:45
该列表包含类型为StringBuilder的对象。
当尝试排序时,排序方法需要比较元素以确定顺序,它通过将元素视为可比较来实现这一点,它将尝试将它们转换为可比较类型。由于String Builder不实现该接口,因此强制转换将失败并抛出异常。
https://stackoverflow.com/questions/5974219
复制相似问题