首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java集合框架问题

java集合框架问题
EN

Stack Overflow用户
提问于 2011-05-12 14:36:37
回答 2查看 1.5K关注 0票数 1

我正在学习java中的集合,并在理解following.It来自scjp时被卡住了(复习问题15.37)。

代码语言:javascript
复制
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,有人能帮帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2011-05-12 14:40:23

你有没有看过documentation for Collections.sort

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

抛出:

ClassCastException -如果列表包含不能相互比较的元素(例如,字符串和整数)。

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

票数 4
EN

Stack Overflow用户

发布于 2011-05-12 14:43:45

该列表包含类型为StringBuilder的对象。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5974219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档