如何使用比较器执行此代码?

发布于 2024-11-04 20:16:14 字数 389 浏览 0 评论 0原文

抱歉,我已经很久没有使用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);
}

Sorry, I don't work with Java since a long time. I have a class which sort int type, and I am trying to do this, but this does not compile:


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

I would like to sort a vector of int using this method using the comparator to sort in ascending order.


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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

别闹i 2024-11-11 20:16:14

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

return (Integer) o1 - (Integer) o2;

The sample code is rather incomplete, but to begin with you cannot cast Object to int. Use

return (Integer) o1 - (Integer) o2;

instead.

寄人书 2024-11-11 20:16:14

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

请改用 List,这是将 Integer 列表作为对象进行操作的现代且正确的方法。

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

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

Collections.sort(list, comparator);

由于Integer实现了Comparable,因此默认情况下会对List进行排序。 Integer> 按升序排列。 Integer 了解详细信息。

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

First off, don't use Vector, or Hashtable for that matter, they both are considered deprecated for all practical purposes. Use List or Map implementations.

Use a List<Integer> instead, it is the modern and correct way to manipulate a list of Integers as objects.

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

If you want to use a different Comparator then you can use:

Collections.sort(list, comparator);

Since Integer implements Comparable, this will by default sort the List<Integer> in ascending order. Integer for the details.

This is the correct, idiomatic way of sorting List and Collection classes in modern Java. Anything else shows you don't understand the language and what it provides.

哆兒滾 2024-11-11 20:16:14

你可以制作一个类型化比较器并且你赢了不需要抛出参数。

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

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

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

You can make a typed Comparator and you won't need to cast the arguments.

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

EDIT:
First off, please don't call an array a vector. Vector is a java class and people will assume that is what you are using when you name the variable vectorOfInt.

The compiler error you are getting is because the compiler doesn't know that your Comparator is operating on Integers. Since all it sees is an Object, it doesn't know that o1 is actually an Integer and can be unboxed to be an int. By specifying the comparator type, you provide more information and the conversion can be made implicitly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文