【问题标题】:How to do this code using Comparator?如何使用 Comparator 执行此代码?
【发布时间】:2011-08-17 22:07:50
【问题描述】:

抱歉,我很久没有使用 Java 了。我有一个排序 int 类型的类,我正在尝试这样做,但这不会编译:

MySort.sort(vectorOfInt, new Comparator() { @Override public int compare(Object o1, Object o2) { return (int)o1 - (int)o2; } });

我想使用此方法对 int 的向量进行排序,使用比较器按升序排序。

public static void sort(T[] a, Comparator c) { sort(a, 0, a.length, c); }

【问题讨论】:

  • 你能解释一下新月顺序吗?
  • 新月=上升。即:1,2,3,4,5,6,7...
  • 无法从 object 转换为 int

标签: java sorting comparator


【解决方案1】:

示例代码相当不完整,但首先您不能将 Object 转换为 int。使用

return (Integer) o1 - (Integer) o2;

改为。

【讨论】:

  • 我更新了代码。我对第一个参数不太了解。你可以帮帮我吗?谢谢。
  • @Seva,第一个参数 T[] a 是一个泛型类型 T 的数组,即类定义为 MySort
【解决方案2】:

您可以创建typed Comparator,而无需转换参数。

MySort.sort(vectorOfInt, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
      return o1 - o2;
    }
    });

编辑:
首先,请不要将数组称为向量。 Vector 是一个 java 类,当您将变量命名为 vectorOfInt 时,人们会假设您正在使用它。

您得到的编译器错误是因为编译器不知道您的Comparator 正在Integers 上运行。由于它看到的只是一个Object,它不知道o1 实际上是一个Integer,并且可以拆箱为int。通过指定比较器类型,您可以提供更多信息,并且可以隐式进行转换。

【讨论】:

  • 我更新了代码。我对第一个参数不太了解。你可以帮帮我吗?谢谢。
  • 感谢矢量教学。但是我还是不能编译,因为 sort 方法需要一个 T[] 参数。
  • @Seva:T 是在哪里定义的?它不是通用方法,因此必须由包含类设​​置。包含sort() 的类签名是什么?
【解决方案3】:

首先,不要使用VectorHashtable,出于所有实际目的,它们都被视为deprecated。使用ListMap 实现。

改用List&lt;Integer&gt;,这是将Integers 列表作为对象操作的现代且正确的方法。

final List<Integer> list = new ArrayList<Integer>();
... populate list ...
Collections.sort(list);

如果你想使用不同的Comparator,那么你可以使用:

Collections.sort(list, comparator);

由于Integer 实现了Comparable,默认情况下这将按升序对List&lt;Integer&gt; 进行排序。 Integer了解详情。

这是在现代 Java 中对 ListCollection 类进行排序的正确惯用方式。其他任何情况都表明您不了解该语言及其提供的内容。

【讨论】:

  • 谢谢,但就我而言,我已经有了一个排序类。我更新了代码。
  • 你做错了,你不应该重新实现已经在标准库中的代码。
  • @Jarrod,我不确定您要达到什么目的,但是您在“列表或地图”附近的反引号正在产生格式怪异。
  • 这段代码是一种排序算法,目前Java 6中没有实现。它将在Java 7中实现。
  • 如果您使用的是 Comparator,它已经在 J​​ava 6 中。Comparator 和“Comparable”从一开始就在该语言中。如果您想对Integer 进行排序,那么它已经内置了。在您的代码示例中,我没有看到任何突破性的东西是新的或比Integer 已经做的增强。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2015-07-12
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 2016-02-08
相关资源
最近更新 更多