【问题标题】:Why Doesn't compareTo() work?为什么 compareTo() 不起作用?
【发布时间】:2016-02-04 03:48:36
【问题描述】:

我有两个 ArrayList:

ArrayList<String> testList = new ArrayList<>();
ArrayList<String> wordList = new ArrayList<>();

它们被传递到一个方法中:

public static void binSearch(ArrayList a1, ArrayList a2)

在方法里面,我想比较两个ArrayList之间的字符串:

a1.get(i).compareTo(a2.get(newEnd / 2))

但是,我收到一条错误消息:

cannot find symbol
symbol: method compareTo(Object)
location: class Object

我听说有些人说我需要实现/扩展 Comparable,但似乎有些人在没有导入/实现/扩展任何东西的情况下使用该方法做得很好。

【问题讨论】:

  • ArrayList(没有泛型)没有实现Comparable(或者有一个名为compareTo(Object)的方法。您需要提供自定义比较器或将方法签名更改为更像@ 987654328@
  • @abdelhak newEnd 是一个 int,它保存 ArrayList 的索引,因为它是一种执行二进制搜索的方法

标签: java generics arraylist compareto


【解决方案1】:

不要使用原始类型。以这种方式声明您的binSearch

public static void binSearch(ArrayList<String> a1, ArrayList<String> a2)

或者如果你想支持任何Comparable类型引入泛型类型变量:

public static <T extends Comparable<? super T>> void binSearch(List<T> a1, List<T> a2)

【讨论】:

  • 非常感谢!!这正是我想要的,而且效果很好。
猜你喜欢
  • 2015-03-17
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2019-08-06
  • 2016-07-05
相关资源
最近更新 更多