我有两个Java数组,“int[] myInt”和“float[] myFloat”。两者的尺寸相同并且都非常大。相同索引的数组元素属于在一起(myInt[42] 属于 myFloat[42] 等等)。
我的问题:我想对 myInt 数组和“并行”myFloat 进行排序,以便排序后数据对已经相同。
我无法将这些对放入自己的数据对象中,因为 java 对象的开销会导致内存崩溃。
您是否有想法使用一些 JVM 类来解决这个问题,而无需自己编写排序算法?是否有任何排序算法调用我的代码并告诉我“更改您的数据自己的索引 x 和 y”或类似的内容?
感谢您的帮助!
这里有一个例子:
int[] myInt = {1, 3, 2};
float[] myFloat = {.5, .4, .3};
排序后的值应为:
myInt: {1, 2, 3}
myFloat: {.5, .3, .4}
未经测试,但总体思路是创建一个索引为 0 到 n 的 third 数组(希望这不是太多内存)。然后,您使用比较器对该数组进行排序,该比较器比较
myInt
中的等效值。我认为这就是 @fantaghirocco 的建议,它看起来像这样:
int[] myInt = {1, 3, 2};
float[] myFloat = {.5, .4, .3};
int[] indexes = IntStream.range(0, myInt.length).toArray();
Collections.sort(indexes, Comparator.comparing(i -> myInt[i]));
// The array `indexes` now contains all numbers from 0 to `myInt.length`,
// where each value is the index of a number from myInt/myFloat.
// You can create new sorted myInt/myFloat arrays based on these indexes,
// or use them to swap values in myInt/myFloat until they are sorted.