Java:如何对两个对应的数组进行排序?
我有两个阵列:
First array:
25, 20, 50, 30, 12, 11...
Second Array:
New York, New Jersey, Detroit, Atlanta, Chicago, Los Angeles
第二个数组中的每两个城市对应第一个数组中的一个值
示例:纽约和新泽西对应25,底特律和亚特兰大对应20,依此类推
我想按降序(50、30、25、20…)对第一个数组的数字重新排序,但我还希望第二个数组中的城市也相应地移动,以便它们在排序之前和之后具有相同的值
我如何完成这项任务?(我可以使用ArrayList或Array,两者中比较简单的一种)
# 1 楼答案
下面是一个(4行)解决方案,它还可以处理不匹配的数组长度:
这将从每个数组的流动态创建两个迭代器,两个迭代器都键入到
Object
,以允许在for循环中进行双重初始化。cities数组首先连接成一个字符串,然后拆分成pairs-as-a-string(使用适当的正则表达式)。两个迭代器的元素都填充了一个TreeMap
,它有一个反向的Integer
比较器由于
TreeMaps
按排序的顺序迭代,因此keySet()
和values()
流可用于生成结果数组for
循环的结束条件检查两个迭代器是否有下一个元素可用,如果数组长度不相等,则会导致忽略较长数组中多余的元素# 2 楼答案
Java 8提供了一种更优雅的方法来实现这一点,而不需要单独的映射:
之所以需要装箱,是因为
IntStream
没有带有自定义Comparator
的sorted
方法。我不知道为什么不如果您想以
List
结束,那么使用.collect(Collectors.toList())
而不是toArray
# 3 楼答案
您可以使用树形图:
这张地图将按关键自然顺序排序
但我建议你们做集装箱班。比如:
现在,您可以按数据填写列表:
正如您所看到的,我没有检查索引的“索引超出范围”,但您应该这样做。之后,您可以对列表进行排序。您可以使用例如Bubble sort算法手动执行,但更好的方法是编写自定义比较器:
现在,您可以使用Collections实用程序类对列表进行排序:
使用这种方法,您可以将
CityPair
类中的String[] cities
替换为ArrayList<Sting> cities
。然后,它将能够增加超过两个城市的价值# 4 楼答案
我尝试过这样的解决方案,它根据您的要求使用Arraylist:
首先,我为您的操作创建了一个新的数据结构。因为每个值将包含两个城市名称:
正如您在这里看到的,使用Comparable接口的实现将用于比较的参数作为citizenID
现在打电话:
输出: