如何在数组中打印10个最小值的索引

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,所以可能会有一些简单的方法来修复它.或者更好地使用其他东西?

我将不胜感激任何帮助

Ale*_* C. 4

这是最小的数字,但我丢失了这个值的索引,它们有一个未排序的数组

那么为什么不创建一个类来保存这个索引呢?然后只需按值对数组进行排序,您就会获得关联的索引。

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)