Pet*_*mek 8 java arrays treemap
我需要从数组中选择10个最小数字(有2 000个项目)并打印它们的索引.
起初我尝试对这个数组进行排序并打印值数组[0到9].这是最小的数字,但我丢失了这个值的索引,他们有非排序数组.
第二个选项尝试使用treeMap,它运行良好,但是当我有两个相同的键时,它只打印其中一个,但我需要打印它们.
使用treeMap的使用代码示例:
TreeMap<Integer, String> treemap = new TreeMap<Integer, String>();
treemap.put(2, "two");
treemap.put(1, "one");
treemap.put(3, "three");
treemap.put(6, "six");
treemap.put(6, "six2");
treemap.put(5, "five");
Collection<String> coll=treemap.values();
System.out.println("Value of the collection: "+coll);
Run Code Online (Sandbox Code Playgroud)
到目前为止我还没有使用treeMap,所以可能会有一些简单的方法来修复它.或者更好地使用其他东西?
我将不胜感激任何帮助
这是最小的数字,但我丢失了这个值的索引,它们有一个未排序的数组
那么为什么不创建一个类来保存这个索引呢?然后只需按值对数组进行排序,您就会获得关联的索引。
class MyClass implements Comparable<MyClass>{
private int index;
private int value;
public MyClass(int i, int v){
this.index = i;
this.value = v;
}
@Override
public String toString(){
return "Index: "+index+" Value: "+value;
}
@Override
public int compareTo(MyClass m) {
return value - m.value;
}
}
Run Code Online (Sandbox Code Playgroud)
public static void main(String[] args){
MyClass[] array = new MyClass[20];
for(int i = 0; i < array.length; i++){
array[i] = new MyClass(i, someRandomValue); // Here I used (i*3 + 2)%5
}
System.out.println(Arrays.toString(array));
Arrays.sort(array);
MyClass [] arraySorted = Arrays.copyOfRange(array, 0, 10); //take the first ten elements
System.out.println(Arrays.toString(arraySorted));
}
Run Code Online (Sandbox Code Playgroud)
如果您想按索引对具有相同值的对象进行排序,您可以像这样修改比较器:
@Override
public int compareTo(MyClass m) {
int compareValue = value - m.value;
if(compareValue == 0)
return index - m.index;
return compareValue;
}
Run Code Online (Sandbox Code Playgroud)
compareTo方法):
Before :
[Index: 0 Value: 2, Index: 1 Value: 0, Index: 2 Value: 3, Index: 3 Value: 1, Index: 4 Value: 4, Index: 5 Value: 2, Index: 6 Value: 0, Index: 7 Value: 3, Index: 8 Value: 1, Index: 9 Value: 4, Index: 10 Value: 2, Index: 11 Value: 0, Index: 12 Value: 3, Index: 13 Value: 1, Index: 14 Value: 4]
After :
[Index: 1 Value: 0, Index: 6 Value: 0, Index: 11 Value: 0, Index: 3 Value: 1, Index: 8 Value: 1, Index: 13 Value: 1, Index: 0 Value: 2, Index: 5 Value: 2, Index: 10 Value: 2, Index: 2 Value: 3]
Run Code Online (Sandbox Code Playgroud)