【发布时间】:2015-08-29 13:05:22
【问题描述】:
我有 6 个 ArrayList,如下所示:
index: 0 1 2 3 4 5
[12345.12 |123.0 |12.12 |1234.0 |123.12 |123.12 ] <Double>
[2000-01-11 |2000-01-11 |2000-01-11 |2000-01-12 |2000-01-12 |2000-01-11] <String>
[1234 | 1234 | 1234 | 1235 | 1235 | 1234 ] <String>
[4 | 10 | 16 | 24 | 30 | 20 ] <Integer>
[7 | 13 | 19 | 27 | 34 | 25 ] <Integer>
[9 | 15 | 21 | 29 | 35 | 40 ] <Integer>
使用 Java,我想按第一个列表的值降序对它们进行排序。 如果第一个列表中的值相等,则将两个相等的值按第二个列表中的对应值按自然顺序排序。第二个列表中的字符串可以通过调用 Collection.sort(second_list) 以自然顺序排序。
(示例:因为索引 4 和 5 处的元素相等,我必须按第二个列表中索引 4 和 5 处的元素按自然顺序对它们进行排序:123.12 = 123.12 但“2000-01- 12" > "2000-01-11",所以最后两个索引的顺序是 5, 4)
排序后的列表应如下所示:
0 3 5 4 1 2
[12345.12 |1234.0 |123.12 |123.12 |123.0 |12.12 ] <Double>
[2000-01-11 |2000-01-12 |2000-01-11 |2000-01-12 |2000-01-11 |2000-01-11] <String>
[1234 | 1235 | 1234 | 1235 | 1234 | 1234 ] <String>
[4 | 24 | 20 | 30 | 10 | 16 ] <Integer>
[7 | 27 | 25 | 34 | 13 | 19 ] <Integer>
[9 | 29 | 40 | 35 | 15 | 21 ] <Integer>
我尝试构建一个字符串数组列表,其中列表中的每个元素都包含一列中的元素,如上所示(例如:索引为 0 的列)。在上面列中的每个元素之后,我用逗号“,”连接字符串,以便在排序后拆分字符串(例如:“12345.12,2000-01-11,...,9”。因为排序没有没有按预期工作,我放弃了这个计划。
我需要一种允许行中重复值的表。
如果第一个 List 是一个 Map,其中索引是键,值是上面 ArrayLists 中的元素,我可以这样做:
- 我按值对
Map<Integer, Double>的值进行排序。 索引 - 是键,呈现的第一个列表中的元素 - 是值。所以我得到了索引的顺序:0 3 5 4 1 2 - 我按此自定义顺序对其他 ArrayList 进行排序,但如果
Map<Integer, Double>中的值重复,我该怎么办?如何按第二个 List 中元素的自然顺序对它们进行排序?
...我需要一个可以快速排序提到的列表的结构。
【问题讨论】:
-
Collections.sort采用可选的Comparator。写一个使用主列表中的值排序的。 -
您是否必须为要比较的每个对象创建一个列表?如果你想比较另一个,你必须手动创建另一个
ArrayList?为什么不使用 OOP 范例 并使用您的数据创建一个对象,然后任何时候您想要添加一个新对象,您只需实例化一个新对象并添加到您的列表中。此外,当您想比较它们时,只需使用nameList.get(i).getNameFirstValue() -
而不是有 6 个属性的数组列表,听起来你应该有 1 个具有 6 个属性的对象列表。那么问题将是微不足道的 - 只需使用比较器对列表进行排序,用于连续检查每个属性的对象
-
@twentymon
Collections#sort没有采取方法改变swap的实现,这是问题的根源。比较不是问题。
标签: java sorting arraylist row