java集合框架问题

java集合框架问题,java,frameworks,collections,Java,Frameworks,Collections,我正在用java学习收藏,在理解以下内容时陷入了困境。它摘自khalid mughal的scjp(回顾问题15.37) import java.util.ArrayList; 导入java.util.Collections; 导入java.util.List; 公共课这是什么{ 公共静态void main(字符串[]args){ 列表=新的ArrayList(); 列表。添加(新StringBuilder(“B”); 添加(新的StringBuilder(“A”)); 列表。添加(新的Strin

我正在用java学习收藏,在理解以下内容时陷入了困境。它摘自khalid mughal的scjp(回顾问题15.37)

import java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公共课这是什么{
公共静态void main(字符串[]args){
列表=新的ArrayList();
列表。添加(新StringBuilder(“B”);
添加(新的StringBuilder(“A”));
列表。添加(新的StringBuilder(“C”);
Collections.sort(list,Collections.reverseOrder());
System.out.println(list.subList(1,2));
}
}
选择一个正确答案

a。程序运行时将编译并打印以下内容:[B]。
B程序运行时将编译并打印以下内容:[B,A]。
C程序将编译,但运行时会引发异常。
D程序将无法编译。

以下是答案-

(c) StringBuilder类没有实现类似的接口。排序 采用比较器的方法不会对ele提出任何此类要求- 非对称型。程序进行编译,但抛出一个ClassCastException作为字符串- 生成器对象不能按反向自然顺序进行比较

我听不懂答案。有谁能帮我一下吗?

你看了那本书了吗

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

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

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

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

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


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


当尝试排序时,排序方法需要比较元素以确定顺序,它通过将元素视为可比较来进行比较,它将尝试将它们转换为可比较类型。由于String Builder未实现该接口,转换将失败并引发异常。

列表中包含类型为StringBuilder的对象


当尝试排序时,排序方法需要比较元素以确定顺序,它通过将元素视为可比较来进行比较,它将尝试将它们转换为可比较类型。由于String Builder没有实现该接口,强制转换将失败并引发异常。

谢谢。我没有检查文档(我有点懒,文档对我来说很难:)。我所了解的是,StringBuilder覆盖了equals、hascode而不是compareto,这就是问题所在。关于“根据元素的自然顺序,将指定列表按升序排序”-除了字符串和数字,其他对象如何实现此升序?我想这些类必须重写compareto方法?谢谢。我没有检查doc(我有点懒,doc对我来说看起来很难:))。我所了解的是StringBuilder重写equals、hascode但不重写compareto,这就是问题所在。About“根据元素的自然顺序,将指定列表按升序排序-除字符串和数字外,其他对象如何实现此升序?我猜这些类必须重写compareto方法?谢谢,这是一个例外类,它重写了equals,hascode,但不是comapreto?因此不能用集合对包含stringbuilder对象的列表进行排序。sort方法?谢谢,这是一个例外类,它重写了equals,hascode但不是comapreto?因此您不能使用Collections.sort方法对包含stringbuilder对象的列表进行排序?
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));
  }
}