JAVA(数组/list/堆)sort自定义方法总结(重写自定义方法 & Lambda表达式)

JAVA中有很多方便的内置函数和方法,其方法可以自定义和改写。
今天对Sort方法做一下小结:

  1. 对数组进行排序

    1.1 默认排序(升序)

        int[] temp = {3, 6, 9, 3, 2, 1, 8, 7};
        Arrays.sort(temp);
        System.out.println(Arrays.toString(temp));
        //输出:[1, 2, 3, 3, 6, 7, 8, 9]
    

    1.2 自定义排序(降序)(1D)
    注意‼️: 这里不能定义int[], 而要定义Integer[], 以object形式操作才行

    /** 1.重写Comparator函数**/
      Integer[] temp = {3, 6, 9, 3, 2, 1, 8, 7};
      Arrays.sort(temp, new Comparator<Integer>() {
          public int compare(Integer a, Integer b) {
              return b - a;
          }
      });
      System.out.println(Arrays.toString(temp));
      //输出:[9, 8, 7, 6, 3, 3, 2, 1]
      
    /**2. Lambda函数表达式**/
      Integer[] temp = {3, 6, 9, 3, 2, 1, 8, 7};
      Arrays.sort(temp, (a, b) -> b - a);
      System.out.println(Arrays.toString(temp));
      //输出:[9, 8, 7, 6, 3, 3, 2, 1]
    

    1.3自定义排序(升序)(2D)

      //按[0]维升序排,如果[0]相等,则按[1]维升序排
      int[][] array = {{5, 7}, {5, 2}, {2, 5}, {5, 8}, {7, 1}, {4, 3}, {2, 3}}};
      Arrays.sort(array, new Comparator<int[]>() {
          @Override
          public int compare(int[] o1, int[] o2) {
              return o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0];
          }
      });
      //输出: [2, 3] [2, 5] [4, 3] [5, 2] [5, 7] [5, 8] [7, 1] 
    
  2. 对集合进行排序

    2.1 默认排序(升序)

      /** 注意事项 **/
      //如果使用Arrays.asList()进行初始化,则当想把初始化的list加入List<List<Integer>> res
      //需要res.add((List<Integer>)list); 用(List<Integer>)进行强转, 否则会报错.
      List<Integer> list = Arrays.asList(3, 6, 9, 3, 2, 1, 8, 7);
      Collections.sort(list);
      System.out.println(list);
      //输出:[1, 2, 3, 3, 6, 7, 8, 9]
    

    2.2 自定义排序(降序)

    /** 1.重写Comparator函数**/
     List<Integer> list = Arrays.asList(3, 6, 9, 3, 2, 1, 8, 7);
      Collections.sort(list, new Comparator<Integer>() {
          public int compare(Integer a, Integer b) {
              return b - a;
          }
      });
      System.out.println(list);
      //输出:[9, 8, 7, 6, 3, 3, 2, 1]
      
    /**2. Lambda函数表达式**/
      //形式1:
      List<Integer> list = Arrays.asList(3, 6, 9, 3, 2, 1, 8, 7);
      Collections.sort(list, (a, b) -> b - a);
      System.out.println(list);
      //输出:[9, 8, 7, 6, 3, 3, 2, 1]
      
      //形式2:
      List<Integer> list = Arrays.asList(3, 6, 9, 3, 2, 1, 8, 7);
      Collections.sort(list, (a, b) -> {
          return b - a;
      });
      System.out.println(list);
      //输出:[9, 8, 7, 6, 3, 3, 2, 1]
    
  3. 堆排序
      //默认最小堆
      Queue<Integer> minPq = new PriorityQueue<>();
      //自定义最大堆
      Queue<Integer> maxPq = new PriorityQueue<>(new Comparator<Integer>() {
      @Override
    	  public int compare(Integer o1, Integer o2) {
    		  return o2 - o1;
    	  }
      });
      //稍复杂排序
      //题目来源: https://algo.monster/problems/top_k_frequently_mentioned_keywords
      /**HashMap<字符, 出现的频数>, 按频数降序排列,若频数相同则字符按字典序排列**/
      HashMap<String, Integer> map = new HashMap<>();
      Queue<Map.Entry<String, Integer>> maxPq = new PriorityQueue<>(new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
               return o2.getValue().equals(o1.getValue()) ? o1.getKey().compareTo(o2.getKey()) : o2.getValue() - o1.getValue();
            }
        });
        
      //附加:
      //遍历HashMap中的Entry
      for (Map.Entry<String, Integer> en : map.entrySet()) {
            if (en.getValue() != 0) {
                maxPq.offer(en);
            }
        }  
    

    如若有遗漏请评论留言:) 有时间会补充

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值