java集合框架问题

时间:2011-05-12 06:36:37

标签: java frameworks collections

我正在研究java中的集合并且在理解以下内容时卡住了。它是从khalid mughal的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));
  }
}

选择一个正确答案。

一个。程序将在运行时编译并打印以下内容:[B]。
湾运行时程序将编译并打印以下内容:[B,A] C。程序将编译,但在运行时抛出异常 d。该程序将无法编译。

以下是答案 -

(c)中 StringBuilder类不实现Comparable接口。排序() 采用比较器的方法不会对电子产品提出任何此类要求。 类型。程序编译,但抛出ClassCastException,如String- 无法以反向自然顺序比较构建器对象。

我无法理解答案。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:4)

你看过documentation for Collections.sort吗?

  

根据元素的自然顺序,将指定列表按升序排序。列表中的所有元素都必须实现Comparable接口。此外,列表中的所有元素必须是可相互比较的(即,e1.compareTo(e2)不得对列表中的任何元素e1和e2抛出ClassCastException。)

  

<强>抛出:
  ClassCastException - 如果列表包含不可相互比较的元素(例如,字符串和整数)。

这对你有帮助吗?基本上,为了对列表进行排序,sort必须将StringBuilder值相互比较 - 并且StringBuilder中没有声明自然比较。

答案 1 :(得分:0)

List正在保存类型为StringBuilder的对象。

当尝试排序时,sort方法需要比较元素来决定顺序,它通过将元素视为Comparable来实现,它会尝试将它们强制转换为Comparable类型。由于String Builder未实现该接口,因此强制转换将失败并抛出异常。