如何在Java中编写已排序数组的索引?
例如:
int[] myIntArray = new int[]{20,100,69,4};
和Arrays.sort(myIntArray)
结果是:
{4,20,69,100}
如果需要index
原始数组怎么办?
表示:
{3,0,2,1}
答案 0 :(得分:3)
如果我理解你的问题。
考虑到您的数组中没有重复项。对数组进行排序后。
选项1:
编写一个小帮助方法。
将每个值传递给下面的方法并获取它的索引。
public int findIndex(int[] iarray, int value) {
for(int i=0; i<iarray.length; i++)
if(iarray[i] == value)
return i;
}
选项2:
使用org.apache.commons.lang Class ArrayUtils
public static int indexOf(int[] array,
int valueToFind)
然后,
如果您想将这些索引存储在数组中,请使用具有初始数组长度的数组,并使用返回的索引填充该数组。
答案 1 :(得分:2)
我认为这样做的方法是创建一个类&#34; intWithIndex&#34;实施可比较。通过这种方式,您可以跟踪索引。
public class IntWithIndex implements Comparable<IntWithIndex>{
public int value;
public int index;
@Override
Public int compareTo(intWithIndex x) {
return value - x.value;
}
}
public Test {
IntWithIndex[] myArray = ...
myArray[].sort;
}
IntWithIndex []。sort应该可以工作,你可以用索引字段检查初始索引。
你明白我的意思吗?
答案 2 :(得分:2)
声明一个包含索引和值的类,并设置一个只比较值的比较器。
class IndexAndValue implements Comparable<IndexAndValue> {
public int index;
public int value;
public IndexAndValue(int index, int value) {
this.index = index;
this.value = value;
}
@Override
public int compareTo(IndexAndValue other) {
return Integer.compareTo(value, other.value);
}
}
构建包含索引和值的IndexAndValue
个对象数组。
IndexAndValue[] myIVArray = new IndexAndValue[myIntArray.length];
for (int i = 0; i < myIntArray.length, i++)
myIVArray[i] = new IndexAndValue(i, myIntArray[i]);
现在当你在myIVArray上调用sort时,它将使用比较器进行排序,这意味着它将比较这些值。但是结果数组包含IndexAndValue对象,它们将索引与值保持在一起。
(P.S。没有经过测试,所以我可能会拙劣一些语法......)
(PPS。公共数据成员通常都是邪恶的,但我认为对于像这样的小类来说,这样做的目的只是将几个值放在一起。但如果你不喜欢它,那就把它们设为私有并使用存取器方法。)
答案 3 :(得分:0)
@SURESH ATTA的附加内容,您可以使用Map来定义数据结构,密钥将保存为索引,值将是您的整数。
答案 4 :(得分:0)
在不使用任何lib的情况下获取indexArray的排序值。还要注意复制/多个数组元素。
import java.util.Arrays;
public class IndexCal {
public static void main(String args[]) {
int[] myIntArray = new int[] { 20, 100, 69, 4, 20, 4, 100 };
int[] copyArray = new int[myIntArray.length];
System.arraycopy(myIntArray, 0, copyArray, 0, myIntArray.length);
Arrays.sort(myIntArray);
int[] indexArray = new int[myIntArray.length];
Arrays.fill(indexArray, -1);
for (int i = 0; i < copyArray.length; i++) {
int skiplength = 0;
int index = find(copyArray, myIntArray[i], 0);
while(find(indexArray, index, 0) != -1){
index = find(copyArray, myIntArray[i], skiplength++);
}
indexArray[i] = index;
}
for (int i = 0; i < copyArray.length; i++) {
System.out.println(indexArray[i]);
}
}
public static int find(int[] array, int value, int skiplength) {
for (int i = 0; i < array.length; i++)
if (array[i] == value)
if(skiplength == 0)
return i;
else
skiplength--;
return -1;
}
}