当前位置: 首页 > 知识库问答 >
问题:

在使用比较器接口比较方法的Java集合排序中,返回值-1,0,1到底意味着什么?

束飞捷
2023-03-14
import java.util.*;
public class HelloWorld {
  public static void main(String[] args) {
    Student s1 = new Student("JJJ", 5);
    Student s2 = new Student("DDD", 2);
    Student s3 = new Student("RRR", 4);
    Student s4 = new Student("CCC", 4);
    Student s5 = new Student("GGG", 3);
    Student s6 = new Student("JJJ", 1);
    List < Student > ls = new ArrayList < > ();
    ls.add(s1);
    ls.add(s2);
    ls.add(s3);
    ls.add(s4);
    ls.add(s5);
    ls.add(s6);
    for (Student s: ls) {
      s.print();
    }
    System.out.println("=====================");
    ls.sort(new Comparator < Student > () {
      @Override
      public int compare(Student s1, Student s2) {
        if (s1.grade < s2.grade) return -1;
        // else if (s1.grade > s2.grade) return 1;
        else return 0;
      }
    });
    for (Student s: ls) {
      s.print();
    }
  }
  public static void printLs(List < Student > ls) {
    for (Student s: ls) {
      s.print();
    }
  }
}
class Student {
  String name;
  int grade;

  Student(String name, int grade) {
    this.name = name;
    this.grade = grade;
  }

  void print() {
    System.out.println(this.name + " - " + this.grade);
  }
}

共有1个答案

谷彦君
2023-03-14

如果是-1,那么两个值将[交换]

不一定。这取决于排序代码用哪两个元素调用回调。返回-1可能不会使它交换它们,但返回1可以。

我在没有返回值1的情况下测试了我的程序,它的排序是正确的。

 类似资料:
  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 我有一个程序可以对计算机的某个目录中的文件进行排序。我正在使用比较器接口和Collections.Sort-方法,但我无法访问调用类的输出。我也不知道如何在Sort-class中对对象进行排序。 1)如果有人能告诉我如何使用compare-method(prototyp是:sort(List List,Comparator c)我会很高兴

  • 本文向大家介绍对比Java中的Comparable排序接口和Comparator比较器接口,包括了对比Java中的Comparable排序接口和Comparator比较器接口的使用技巧和注意事项,需要的朋友参考一下 Comparable Comparable 是排序接口。 若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在

  • 我是java新手,试图理解一些概念。这是一段我不懂的代码。 我知道这是怎么回事,但不明白为什么这是允许的。因此,我的问题是: 从java文档中,比较器[T]是一个接口。比较器[水果]怎么样?我将假设它是一个类,因为它必须覆盖比较函数。 为什么可以在{}中使用非参数构造函数和类定义来初始化FruitName比较器?我在比较器[T]的javadoc中没有找到这样的构造函数声明。 如有任何意见,将不胜感

  • 我有一个关于比较器接口的问题。在我的类下面实现了按长度而不是按字符值排序的默认排序的接口。 覆盖默认比较后,我使用对我的字符串数组进行排序。即使我覆盖了默认方法,如果我使用Arrays.sort,它会调用默认比较而不是我覆盖的方法。这是因为我显式调用了超类方法吗? 另一个问题是初始化接口本身。我知道您不能初始化接口,而是初始化一个类对象(实现所述接口)来引用接口可用的方法。在这种情况下,当我初始化

  • 我必须写一个程序 > 使用一个类ShopItem,其中一个项目的属性是:barCodeNumber、itemName、price和QuantityInStock。创建5个ShopItems实例(item1、item2、item3、item4和item5)的属性值为我自己的值。 为ShopItem使用一个比较器(BarcodeParator),它允许基于它们的barCodeNumber对ShopIt