是什么原因导致 ClassCastException: java.util.TreeSet 无法转换为 java.lang.Comparable?

2024-01-03

因此,我尝试将一定长度的所有字符串从字符串集合(可以是集合或列表)移动到 TreeMap,并将每个字符串中的字符集设置为该字符串的键 但这条线map.put(keyRinger(word), word); throws java.lang.ClassCastException: java.util.TreeSet cannot be cast to java.lang.Comparable

Map<Set<Character>, String> map = new TreeMap<Set<Character>, String>();
for (String words : words)    {
  if (word.length() == length)  {
    map.put(keyRinger(word), word);
  }
}

这是keyRing如果您好奇的话。

private Set<Character> keyRinger(String current)  { 
  Set<Character> keyRing = new TreeSet<Character>();
  for (int i = 0; i < current.length(); i++)   {
    char key = current.charAt(i); 
    keyRing.add(key);
  }
  return keyRing;
}

所以我的问题是我能做些什么来避免这种情况?我读过我需要一个Comparator或实施Comparable但我不知道该怎么做,我认为可能有一个更简单的解决方案(尽管可能效率不高)。


你会注意到 javadocTreeMap http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html states

映射根据其键的自然顺序进行排序,或者按 在地图创建时提供的比较器,具体取决于哪个 使用构造函数。

所以如果你不提供Comparator http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html,它将使用自然排序。什么是自然排序? javadoc 的Comparable http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html界面状态

该接口对每个类的对象强加总排序 实现它。这种顺序被称为类的 自然排序,该类的compareTo方法被称为 其自然的比较方法。

所以你的关键要素TreeMap必须执行Comparable。您正在尝试使用TreeSet实例作为你的键TreeMap. TreeSet http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html不实施Comparable.

你得到一个ClassCastException when TreeMap尝试将密钥投射到Comparable参考以便使用其compareTo方法。

要解决此问题,您应该创建一个TreeMap通过提供您自己的定制Comparator用于比较Set<Character>实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是什么原因导致 ClassCastException: java.util.TreeSet 无法转换为 java.lang.Comparable? 的相关文章

随机推荐

  • AS3:合并 XML 文件

    这里有很多关于将 XML 与 Java 合并的帖子 但我似乎找不到任何针对同一任务的 Actionscript 参考 我有一组需要加载的 XML 文件 我希望它们在内存中排序为一个 XML 对象 例如 假设这些是我的 XML 文件 File
  • Spark SQL - gzip、snappy 和 lzo 压缩格式之间的区别

    我正在尝试使用 Spark SQL 来编写parquet file Spark SQL 默认支持gzip 但它也支持其他压缩格式 例如snappy and lzo 这些压缩格式有什么区别 压缩率 GZIP 压缩比 Snappy 或 LZO
  • 如何正确使用JVM -XX:MaxRAM选项? [复制]

    这个问题在这里已经有答案了 我使用以下参数运行 java 应用程序 bin bash export JVM OPTS XX MaxRAM 150m export JVM OPTS JVM OPTS XX UseSerialGC java J
  • 如何更改 IntelliJ 中所有模块的语言级别

    我有一个包含许多模块的项目 我们正在升级到 Java7 我希望我的编辑器能够反映这一点 现在我的所有模块都专门将语言级别设置为Java6 并且模块太多 我无法为每个模块更改此设置 如何将所有模块设置为 Java7 更好的是 如何设置所有模块
  • SharedPreferences 替换数据

    我有一个应用程序 每当我按下按钮时都会给我一些字符串 然后使用共享首选项保存该值 但是 我想限制此保存功能 因此它只会保存最后三个收到的字符串 其结构如下 字符串A 字符串 B 字符串 C 下次当我单击按钮时 它将将该值记录到字符串 A 中
  • Python:如何从列表中检查字符串中的子字符串? [复制]

    这个问题在这里已经有答案了 如何检查字符串中列表中包含的子字符串 例如检查字符串是否包含 字符串 列表中的元素 https stackoverflow com questions 500925 但是在 Python 中呢 试试这个测试 an
  • Lambda 表达式的代码覆盖率

    我在整个代码中看到一种模式 其中 lambda 表达式显示为未包含在代码覆盖范围内 调试器确实单步执行代码并且没有条件块 public CollectionModel List
  • Ocaml 变体类型

    无论我读什么教程 手册 OCaml 类型总是让我感到困惑 我需要定义一个类型 比如说测试 它包含以下形式 具有以下形式之一的类型 a b 测试 空 T t N n Seq x1 xn 我知道如何做前 3 个 但我完全不知道如何定义最后一个形
  • 从 git 标签获取版本(通过 pbr)

    I use pbr https pypi python org pypi pbr用于包装 它从 git 标签获取版本并将其应用于 setup py 现在我还想在包中提供可用的版本 例如有一个 version 属性 我可以使用pbr图书馆为此
  • Ionic 3:从 PlayStore 链接获取价值

    我有一个 Ionic 3 应用程序 我想根据 Playstore 的下载链接在其中设置一些变量 例如 http linktoplaystore com app account 4会将我的应用程序内的帐户变量设置为 4 有什么方法可以实现此目
  • CasperJS 将数据传回 PHP

    PHP 正在使用 CasperJS 调用exec 命令 CasperJS 完成检索网页部分内容等工作后 如何将检索到的数据返回给 PHP 我认为将数据从 CasperJS 传输到另一种语言 例如 PHP 的最佳方法是将 CasperJS 脚
  • 如何调试使用 Chrome/WebKit 作为远程调试器运行的 Node.js 服务器?

    如果你的节点正在运行 node debug server js 这给了我一个端口号 xxxx 我应该在启动 Chrome 时使用这个端口号吗 您是否从远程调试它Google Chrome remote debugging port xxxx
  • 如何测试使用 mechanize 的 ruby​​ 应用程序

    我编写了一个使用 Mechanize 遍历站点的小程序 我想为它编写测试 但不希望它在每次运行测试时都实际登录到该网站 我想模拟互联网 以便当它访问某个站点时 它只是返回存储的结果 这是一个小例子 假设我的代码的目的是从谷歌主页上提取链接
  • 如何制作表格超链接的单元格

    在没有 javascript 或 jquery 的情况下 如何在 html 中对整个表格单元格进行超链接 我尝试将 href 放入 td 标签本身 但至少在 chrome 18 中不起作用 td href http www m w com
  • 使用正则表达式排除某些字符

    尽我所能 我无法让正则表达式排除空格或单引号 允许使用字符串 abc 不允许 a bc abc abc 等 上例中的空格也可以替换 假定已删除尾随和前导空格 其他地方检查空字符串 目标语言是javascript 如果我使用 SQL 我会使用
  • Laravel - 雄辩的“Has”、“With”、“WhereHas” - 它们是什么意思?

    我发现这些方法背后的概念和含义有点令人困惑 有人可以向我解释一下它们之间的区别吗 has and with是 在一个例子的上下文中 如果可能的话 With with is for 急切加载 这基本上意味着 Laravel 将沿着主模型预加载
  • Facebook Graph 高分辨率照片

    我正在为 me home 执行 Facebook Graph API 调用 以获取用户的新闻源 众所周知 您在 图片 字段中获得的 URL 是低分辨率照片 在 100x100 以上的分辨率下看起来效果不佳 我知道您可以通过对 object
  • Swift:无法预加载 Coredata

    当我在 目标 构建阶段 复制捆绑资源 下包含带有 Objective C 的 SQLite 文件时 该文件将被完全复制到目标 即设备或模拟器 在目标上 我得到整个文件 表和内容 记录 行 对 Swift 进行同样的操作 表将被复制 但它们是
  • Flexslider无限循环不起作用

    我在网上到处找 Flexslider 有一个众所周知的问题 无论是滑块还是轮播 当它到达滑块中的最后一个项目时 它会飞回第一个项目 而不是保持无限循环平滑 我不敢相信没有人能解决这个问题 这是我正在使用的 flexSlider 代码 doc
  • 是什么原因导致 ClassCastException: java.util.TreeSet 无法转换为 java.lang.Comparable?

    因此 我尝试将一定长度的所有字符串从字符串集合 可以是集合或列表 移动到 TreeMap 并将每个字符串中的字符集设置为该字符串的键 但这条线map put keyRinger word word throws java lang Clas