假设用户输入一个数组,例如:
Array = {France, Spain, France, France, Italy, Spain, Spain, Italy}
我确实知道它的长度
index
数组将是:
index = {0, 1, 2, 3, 4, 5, 6, 7}
现在,在使用 Arrays.sort(Array);
newArray
会像:
newArray = {France, France, France, Italy, Italy, Spain, Spain, Spain}
而 newIndex
将是:
newIndex = {0, 2, 3, 4, 7, 1, 5, 6}
问题是:如何从输入数组中找到newIndex
?
提前致谢
最佳答案
不要对数组进行排序。对索引数组进行排序,传入一个比较器,该比较器使用数组中的 as 索引来比较值。所以你最终得到 newIndex
作为排序的结果,从那里到实际项目的排序数组是微不足道的。
诚然,这意味着以自定义方式对整数数组进行排序 - 这意味着使用 Integer[]
和标准 Java 库,或者具有“IntComparator”接口(interface)的第 3 方库可以与 sort(int[], IntComparator)
类型的方法结合使用。
编辑:好的,这是一个示例比较器。为简单起见,我假设您只想对“原始”字符串数组进行排序......我不会为空值测试而烦恼。
public class ArrayIndexComparator implements Comparator<Integer>
{
private final String[] array;
public ArrayIndexComparator(String[] array)
{
this.array = array;
}
public Integer[] createIndexArray()
{
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < array.length; i++)
{
indexes[i] = i; // Autoboxing
}
return indexes;
}
@Override
public int compare(Integer index1, Integer index2)
{
// Autounbox from Integer to int to use as array indexes
return array[index1].compareTo(array[index2]);
}
}
你会这样使用它:
String[] countries = { "France", "Spain", ... };
ArrayIndexComparator comparator = new ArrayIndexComparator(countries);
Integer[] indexes = comparator.createIndexArray();
Arrays.sort(indexes, comparator);
// Now the indexes are in appropriate order.
关于java - 排序后获取数组的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859261/