在Java中使用排序数组对ArrayList进行排序会得到不同的结果

在Java中使用排序数组对ArrayList进行排序会得到不同的结果,java,arrays,sorting,arraylist,comparator,Java,Arrays,Sorting,Arraylist,Comparator,我想按数组的整数大小从小到大对数组进行排序,我想用相同的数组序列做另一个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", &

我想按数组的整数大小从小到大对数组进行排序,我想用相同的数组序列做另一个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);
它给了我我所期望的:

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

我只是简单地用一些我可以更容易地看到结果的东西来更改字符串数组,我只是不知道是什么造成了这种差异,以及为什么它会这样

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

它适用于这种情况:{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、5和8返回相同的值,为两个3返回1,为两个5返回3,为两个8返回7

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


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

什么是Stringlist?@johaneskun我的错误。我用stringListCopy替换了它。非常感谢!我意识到我试图以错误的方式解决它,需要找到其他类似于你的方式。
String[] startHour = new String[] {"c1","a1","e","a2","d","c2","c3","b","c4","f","a3"};