当前位置: 首页 > 面试题库 >

使用比较器对字符串长度进行排序

白弘伟
2023-03-14
问题内容

尝试根据元素字符串长度对数组进行排序时,我被编译错误震惊。我有一套开始,

Set<String> arraycat = new HashSet<String>();
//add contents to arraycat
String[] array = arraycat.toArray(new String[0]);
//array looks like this now:
//array=[cat,cataaaa,cataa,cata,cataaa]

我理想地想排序

array=[cat,cata,cataa,cataaa,cataaaa]

所以我有一个比较器类型

class comp implements Comparator {

    public int compare(String o1, String o2) {
        if (o1.length() > o2.length()) {
            return 1;
        } else if (o1.length() < o2.length()) {
            return -1;
        } else {
            return 0;
        }
    }
}

然后我打电话给全班

Collections.sort(array, new comp());

但随后,它引发了两个编译错误:

comp is not abstract and does not override abstract method   compare(java.lang.Object,java.lang.Object) in java.util.Comparator
class comp implements Comparator {
^
testa.java:59: cannot find symbol
symbol  : method sort(java.lang.String[],comp)
location: class java.util.Collections
Collections.sort(array, new comp());
^2 errors

任何解决问题的线索,我将不胜感激。


问题答案:

您需要指定一个类型参数,以Comparator使实现生效。

class comp implements Comparator<String> {
  public int compare(String o1, String o2) {
    if (o1.length() > o2.length()) {
      return 1;
    } else if (o1.length() < o2.length()) {
      return -1;
    } else {
      return 0;
    }
  }
}

在Java 1.7和更高版本中,您还可以将此方法的主体简化为:

class comp implements Comparator<String> {
  public int compare(String o1, String o2) {
    return Integer.compare(o1.length(), o2.length());
  }
}

另外,对对象进行Collections.sort排序List。由于要对数组进行排序,因此应使用Arrays.sort

Arrays.sort(array, new comp());


 类似资料:
  • 在引入比较器之前,输出是: 此代码生成的输出为: 我希望它产生的输出是: 编辑:为澄清而编辑。数组已更改,并在添加比较器之前输出。

  • 问题内容: 我想按长度顺序排列一个ArrayList字符串,而不仅仅是数字顺序。 例如,该列表包含以下单词: 需要根据它们的长度差异将它们排序为特殊字符串,例如: 因此最终列表如下所示(方括号中的差异): 问题答案: 使用自定义比较器: 然后使用对列表进行排序。

  • 问题内容: 似乎PHP的运算符区分大小写。那么有使用理由吗? 执行以下操作是否安全? 问题答案: 使用它的原因是因为 如果str1小于str2,则返回<0;如果str1大于str2,则> 0;如果相等,则> 0。 仅返回或,它不会告诉您哪个是“更大”的字符串。

  • 问题内容: 我正在尝试使用来根据字符串的长度对字符串数组进行排序,但这会按字典顺序而不是按长度对字符串进行排序。这是我的代码: 排序后: 但是我想要的是 如何获得上述输出?请给出JDK 1.7和JDK1.8的答案。 问题答案: 如果您使用的是 JDK 1.8或更高版本,则可以使用 lambda表达式( 如 matt 答案)。但是,如果您使用的是 JDK 1.7或更早版本,请尝试编写一个 自定义Co

  • 我正试图根据员工的加入日期对他们的列表进行排序。下面是我的员工类。 下面是我的比较器类:

  • 我有字符串数组:15MB、12MB、1TB、1GB。我想通过遵循MB小于GB和TB的规则来对它们进行词典比较。所以最后我想得到:12MB,15MB,1GB,1TB。我找到了一个比较字母的方法: 我在考虑用数字和字母拆分字符串,但我如何用字母“MB”对它们进行排序。然后根据他们的数字。我是使用两个比较器还是其他什么?