根据一个数组对另一个数组排序

1 Arrays.sort

  重写 Comparator 的 compare 方法,Comparator 传入的参数是泛型,因此不能传入基本数据类型参数,假如要传入 int,应用 Integer 代替。

  假设有一个数组 cakes 代表小蛋糕的名称,prices 代表小蛋糕的价钱,如果要根据小蛋糕的价钱对小蛋糕排序(返回小蛋糕的名称)

  可以先建立一个数组,用于表示排序后的索引,将来根据 prices 对这个索引数组排序,所以要把它写成 Integer 类型的

1 Integer[] index = new Integer[cakes.length];
2 for (int i=0; i<cakes.length; i++) {
3       index[i] = i;
4 }

  然后重写 compare 方法

1 Arrays.sort(index, new Comparator<Integer> () {
2       @Override
3       public int compare(Integer o1, Integer o2) {
4            return prices[o2] - prices[o1];
5 }
6 });
    简写格式为:
1 Arrays.sort(index, (a, b) -> prices[b] - prices[a]);
    compare 默认将比较的对象按照权重升序排列:
return的元素>0 代表 prices[o2] - prices[o1]>0,prices[o2] 比 prices[o1] 大,这时o1的权重比o2大,o2将排在o1前面,此时是按照 prices 从大到小排列
  然后再按照排序好的 index,将 cakes 返回
1 String[] res = new String[cakes.length];
2 for (int i=0; i<cakes.length; i++) {
3      res[i] = cakes[index[i]];
4 }


2023年05月25日更新:

 

2 TreeMap
 
可以自动排序
1 TreeMap<Integer, String> map = new TreeMap<>(Comparator.comparingInt(Integer::intValue).reversed());
2 for (int i = 0; i < cakes.length; i++) {
3      map.put(prices[i], cakes[i]);
4 }
5 String[] res = map.values().toArray(new String[cakes.length]);

 
posted @ 2023-04-25 10:42  小鱼酸奶  阅读(250)  评论(0编辑  收藏  举报