将数组的索引作为值复制到新数组,按最高值排序。 JAVA

时间:2016-12-02 21:55:50

标签: java arrays

我得到一个int array[8]随机不重复的值从0到9.它没有排序。 我想将数组的索引存储在另一个以最高值开头的数组中。

例如输入数组 - {9,8,7,3,6,5,2,4}

输出数组 - {0,1,2,4,5,7,3,6}

新数组的0索引以值等于第一个数组中最高值的索引(降序)开始。

我是新来的,这是我的第一篇文章,我还在学习,所以请原谅。

我不想对第一个数组进行排序。 (不要问我为什么:O)

谢谢

2 个答案:

答案 0 :(得分:2)

信息TreeMap constructorTreeMap values,另请参阅Comparator

// treemap is sorted by the keys. Supplementary, you can use your own
// comparator for a custom order
TreeMap<Integer, Integer> valuesToIndexes=
   new TreeMap<>(new Comparator<Integer>() {
     public int compare(Integer a, Integer b) {
       return b-a; // in the inverse order
     }
   })
;
for(int i=0; i<arr.length; i++) {
  valuesToIndexes.put(arr[i], i);
}
// iterating the values of a map will be done in the order of the map's keys
// Since the key is the array value in reverse (and the value is the index)
// we'll be outputting the array indexes in the decreasing order of its values
for(Integer v : valuesToIndexes.values()) {
  System.out.println(v);
}

答案 1 :(得分:0)

    //input array
    Integer array[] = {9, 8, 7, 4, 5, 6, 1, 2};
    // originalOrder
    List<Integer> originalOrder = new ArrayList<>(Arrays.asList(array));
    //array to sort
    List<Integer> arrayAsList = Arrays.asList(array);

    Collections.sort(arrayAsList, new Comparator<Integer>() {
        @Override
        public int compare(Integer t, Integer t1) {
            return t1.compareTo(t);
        }
    });

    Integer outputArray[] = new Integer[array.length];

    for (int i = 0; i < arrayAsList.size(); i++) {
        Integer integer = arrayAsList.get(i);
        int index = originalOrder.indexOf(integer);
        outputArray[i] = index;

    }

    // test
    for (Integer integer : outputArray) {
        System.out.println(integer);
    }