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

在字符串数组列表中使用compareto()插入排序

马俊
2023-03-14
for(int i = 1; i < list.size(); i++)
{
  int j = i;    
  int orderNum = list.get(j).toLowerCase().compareTo(list.get(j - 1).toLowerCase());
  while(j > 0 && orderNum < 0)
  {
    String temp = list.get(j);
    list.set(j, list.get(j - 1));
    list.set(j - 1, temp);
    j--;
  }
}

所以我想对字符串的ArrayList按字母顺序进行插入排序,ArrayList是[“boy”,“eat”,“apple”,“code”,“tea”],但结果是[“code”,“apple”,“boy”,“eat”,“tea”],所以我不知道发生了什么,尽管我一直在检查我的代码。

谢谢

共有1个答案

谈萧迟
2023-03-14

排序的问题是ordernum必须在内部while循环中不断求值。但每个外循环周期只计算一次。因此最好删除该赋值并将compareTo放置在while循环条件中。你可以在算法中看到这一点。

List<String> list = new ArrayList<>(List.of("boy", "Eat", "apple", "code", "Tea"));
for (int i = 1; i < list.size(); i++) {
    int j = i;
    while (j > 0 && list.get(j).toLowerCase()
            .compareTo(list.get(j - 1).toLowerCase()) < 0) {
        String temp = list.get(j);
        list.set(j, list.get(j - 1));
        list.set(j - 1, temp);
        j--;
    }
}
System.out.println(list);

印刷品

[apple, boy, code, Eat, Tea]

为了使while语句不那么杂乱,可以使用预定义的不区分大小写的比较器,并将列表索引传递给lambda。作为比较的结果,它返回一个boolean

BiFunction<List<String>, Integer, Boolean> comp = (lst, idx)->
       String.CASE_INSENSITIVE_ORDER.compare(list.get(idx), 
                                 list.get(idx-1))<0;
        

那就这样用吧。

while (j > 0 && comp.apply(list,j)) {
 类似资料:
  • 我有一个程序,它接受一个单词和一个文本文件字典,并在字典中搜索与给定单词相等的单词组合(是字母表)。 我最后得到了一个字符串数组的Arraylist,每个数组都是一个包含它所使用的单词的解决方案,Arraylist是所有的解决方案。 它首先按字长(降序)排序,然后对等长字使用字母排序。 我现在对各个数组进行了排序,但我正试图按照某些规则在arraylist中对它们进行排序: 按字数递增 对于包含相

  • 我是mongoDB的新手,但我对couchDB非常了解。在couchdb中,我们有JSONObject和JSONArray,所以我们可以轻松地在文档中插入任何内容,比如 我想做下面这样的事情 所以这里有一个字符串列表,也可以是jsonarray或任何字符串数组,整数类型,这个数组放在文档的键名“master”上。 这是关于如何在mongodb中插入数组的全部想法。 我使用BasicBobObjec

  • 我有这个代码: 并想补充: 敬它。我试过: 但我收到一个错误。

  • 问题内容: 我有一个带有文件名的字符串列表: 输出: 但是我想要: 有没有简单的方法可以做到这一点? 问题答案: 是: 说明:字符串按词法排序,因此在字符串之前(因为< ,因此忽略第一个字符串之后的内容)。因此,我们使用的参数是一个回调函数,该函数接受一个列表项并返回用于对该项目进行排序的值- 在您的情况下,是从文件名的第一部分构建的整数。这样,列表就可以正确地按数值排序。

  • 问题内容: 我有一个字符串arraylist’names’。其中包含人员名称。我想按字母顺序对arraylist进行排序。请帮助我 问题答案: 这将解决您的问题… 要对ArrayList对象进行排序,请使用方法。这是一种静态方法。它将ArrayList对象的元素按升序排序。 万一下面的代码在注释中不起作用,请尝试以下代码。 创建一个自定义比较器类: 然后按您的排序:

  • 问题内容: 我有阵列中的国家/地区列表,我想从列表中选择一个国家/地区(可能是使用随机的?),但是我自己还没有找到答案… 这是我到目前为止所拥有的: 问题答案: 尝试: