java重寫sort()

Ps:Comparable和Comparator接口的區別

Comparable 是排序接口,重寫的時候可以用本身具有排序功能的類。

轉載一個詳解:https://blog.csdn.net/u010859650/article/details/85009595


P1080 國王遊戲

import java.math.BigInteger;
import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        BigInteger k1 = scan.nextBigInteger();
        BigInteger k2 = scan.nextBigInteger();
        King[] kings = new King[n];
        for (int i = 0; i < n; i ++)
            kings[i] = new King(scan.nextBigInteger(), scan.nextBigInteger());
        Arrays.sort(kings);
        BigInteger result = new BigInteger("1");
        for (int i = 0; i < n - 1; i ++)
            result = result.multiply(kings[i].left);
        result = result.multiply(k1).divide(kings[n - 1].right);
        if (result.compareTo(new BigInteger("1")) < 0)
            System.out.println("1");
        else
            System.out.println(result);

    }

}
class King implements Comparable{
    BigInteger left;
    BigInteger right;

    public King(BigInteger left, BigInteger right) {
        this.left = left;
        this.right = right;
    }

    @Override
    public int compareTo(Object o) {//從小到大
        King k = (King) o;
        return this.left.multiply(this.right).compareTo(k.left.multiply(k.right));
    }
}

 

轉一個關於重載sort:https://www.cnblogs.com/zsyacm666666/p/6657017.html

P1208 [USACO1.3]混合牛奶 Mixing Milk

import java.util.*;
class node{
        int price = 0;
        int number = 0;

        public node(int price, int number) {
            this.price = price;
            this.number = number;
        }
}
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Comparator cmp = new cmp();
        int n = scan.nextInt();
        int m = scan.nextInt();
        if (n == 0 && m == 0){
            System.out.println("0");
            return;
        }
        node[] nums = new node[m];
        for (int i = 0; i < m; i ++){
            nums[i] = new node(scan.nextInt(), scan.nextInt());
        }
        int cost = 0;
        int sum = 0;
        Arrays.sort(nums, cmp);
        /*for (int i = 0; i < m; i ++)
            System.out.println(nums[i].price + " " + nums[i].number);*/
        for (int i = 0; i < m; i ++){
            if (nums[i].number + sum <= n){
                sum += nums[i].number;
                cost += nums[i].number*nums[i].price;
                if (sum == n){
                    System.out.println(cost);
                    return;
                }
            }else{
                int t = n - sum;
                cost += nums[i].price * t;
                System.out.println(cost);
                return;
            }
        }

    }
    private static class cmp implements Comparator<node>{
        @Override
        public int compare(node n1, node n2) {//從小到大
            if (n1.price == n2.price)
                return 0;
            return n1.price > n2.price ? 1 : -1;
        }
    }
}

 

這是一道洛谷的簡單模擬

P1056 排座椅:https://www.luogu.com.cn/problem/P1056

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int m = scan.nextInt();//m行
        int n = scan.nextInt();//n列
        int k = scan.nextInt();//行橫線
        int l = scan.nextInt();//列線
        int d = scan.nextInt();//d對

        Map<Integer, Integer> row = new HashMap<>();
        Map<Integer, Integer> column = new HashMap<>();

        int[][] room = new int[d][4];
        for (int i = 0; i < d; i ++){
            for(int j = 0; j < 4; j ++)
                room[i][j] = scan.nextInt();
        }
        //0 2 hang  1 3 lie
        for (int i = 0; i < d; i ++){
            if (room[i][0] == room[i][2]){
                int min = Math.min(room[i][1], room[i][3]);
                if (column.containsKey(min))
                    column.put(min, column.get(min) + 1);
                else
                    column.put(min, 1);
            }
            if (room[i][1] == room[i][3]){
                int min = Math.min(room[i][0], room[i][2]);
                if (row.containsKey(min))
                    row.put(min, row.get(min) + 1);
                else
                    row.put(min, 1);
            }
        }
        List<Map.Entry<Integer, Integer>> list2 = new ArrayList<>(row.entrySet());
        list2.sort(new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());//從大到小
            }
        });
        int[] kk = new int[k];
        for (int i = 0; i < k; i ++){
            kk[i] = list2.get(i).getKey();
        }
        Arrays.sort(kk);
        for (int i = 0; i < k; i ++){
            if (i != k - 1)
                System.out.print(kk[i] + " ");
            else
                System.out.println(kk[i]);
        }

        List<Map.Entry<Integer, Integer>> list1 = new ArrayList<>(column.entrySet());
        list1.sort(new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        int[] ll = new int[l];
        for (int i = 0; i < l; i ++)
            ll[i] = list1.get(i).getKey();
        Arrays.sort(ll);
        for (int i = 0; i < l; i ++){
            if (i != l - 1)
                System.out.print(ll[i] + " ");
            else
                System.out.print(ll[i]);
        }
    }
}

原文鏈接:https://blog.csdn.net/weixin_40263219/java/article/details/88690701

方法一:
Integer a[]=new Integer[]{34,4,45,12,92,9};
Arrays.sort(a, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
Arrays進行從大到小的排序,所排序的必須是Integer對象,否則將出錯,也即a中的數據類型必須是Integer類型,不能是int類型。
方法二:
ArrayList arr = new ArrayList();
arr.add(11);
arr.add(33);
arr.add(22);
Collections.sort(arr, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章