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

在Java中用排序数组排序ArrayList最终得到不同的结果

崔高远
2023-03-14

我想按整数的大小(从小到大)对一个数组进行排序,我想用该数组的相同序列做另一个arrayList。

在本例中,我的数组是“workhour”,而arrayList是来自Starthour的“sortedList”。

我从这里听从了某人的建议。

我写的代码如下所示。

int[] workHour = new int[]{4,2,6,2,5,4, 4, 3, 4,11, 2};
String[] startHour = new String[] {"1","3", "0", "5","3", "5", "6", "8", "8", "2","12"};

final List<String> stringListCopy = Arrays.asList(startHour);
ArrayList<String> sortedList = new ArrayList<>(stringListCopy);
Collections.sort(sortedList, (o1, o2) -> workHour[stringListCopy.indexOf(o1)] - workHour[stringListCopy.indexOf(o2)]);

Arrays.sort(workHour);
System.out.println(sortedList);

我之所以将String而不是Integer放入arrayList中,是因为我得到了相同的结果,所以我切换到String来测试我的代码。

但是,当我像这样更改数组时:

String[] startHour = new String[] {"c1","a1","e","a2","d","c2","c3","b","c4","f","a3"};

它给了我所期望的:

[a1,a2,a3,b,c1,c2,c3,c4,d,e,f]

我想我需要了解比较器类。有人能解释一下吗?

共有1个答案

慕震博
2023-03-14

它适用于以下情况:{“C1”,“A1”,“E”,“A2”,“D”,“C2”,“C3”,“B”,“C4”,“F”,“A3”},因为所有元素都是唯一的。
indexof方法返回给定元素第一次出现的索引,并且由于原始数组{“1”,“3”,“0”,“5”,“3”,“5”,“6”,“8”,“8”,“2”,“12”}包含重复项,indexof将为元素返回相同的值“3 code>”5“”8“(对”3“都返回1,对”5“都返回3,对”8“都返回7)

我不认为您可以在这里应用comparator,因为它使用被比较元素的值,并且您的问题需要检查被比较元素的索引而不检查它们的实际值(嗯,除非您保证元素是唯一的)

或者您可以创建一个pair类列表,其中string字段具有原始列表所包含的字符串的值,int字段具有对应字符串的索引值。在这种情况下,您可以使用comparator对列表进行排序,然后通过迭代排序的对列表来获得排序的字符串列表

 类似资料:
  • 本文向大家介绍Java ArrayList的不同排序方法,包括了Java ArrayList的不同排序方法的使用技巧和注意事项,需要的朋友参考一下 由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一。ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减。你可能已经

  • 我有一个ArrayList of String。 在每个索引上的外部ArrayList中,每个内部ArrayList有四个项目,有四个参数。 联系人ID 联系人姓名 联系地址 联系号码 现在,我想根据Contact Name参数对的完整ArrayList进行排序。 意味着我要访问外部Arraylist,外部Arraylist的每个索引上存在的内部Arraylist应该根据联系人名称进行排序。 比较

  • 我创建了这个随机生成的arraylist,它生成1-50个数字。我想按升序对生成的数字进行排序。不使用集合。sort,我如何使用ArrayList进行排序?

  • 我想用java对数字数组列表进行排序,所以基本上如果我有以下数组列表: 输出应为: arraylist应该根据第一个键然后第二个键进行排序。

  • 问题内容: 我有一个数组列表 并且在arraylist中有很多类型的对象值,这些值都是不同的。其中一个值是也与该数组列表一起设置的项目等级。 现在,我想根据排名的顺序对数组列表进行排序。排名值已在此数组列表中设置。 我如何排序其中一个具有很多类型的值…的数组列表? 谢谢大家。 问题答案: 使它们都是一种类型的对象。设计一个通用的基类或一个 然后 用于整理它们 例如。 假设arraylist中的所有