Skip to content

Collections 概述

  • Collections (类)是仅由静态方法组合或返回集合,它包含对集合进行操作的多态算法

  • Collections 类的常用方法

方法名说明
public static <T extends Comparable<? super T>> void sort(List<T> list)对指定的列表升序排序
public static void reverse(List<?> list)反转指定列表中元素的顺序
public static void shuffle(List<?> list)使用默认的随机源随机排列指定的列表
java
List<Integer> list=new ArrayList<Integer>();

list.add(2);
list.add(1);
list.add(4);
list.add(3);

//void sort(List<T> list)  对指定的列表升序排序
//Collections.sort(list);  //[1, 2, 3, 4]

//void reverse(List<?> list) 反转指定列表中元素的顺序
//Collections.reverse(list);// [3, 4, 1, 2]

//void shuffle(List<?> list) 使用默认的随机源随机排列指定的列表
Collections.shuffle(list);//[2, 4, 3, 1]

System.out.println(list);

2.模拟斗地主随机发牌

java
    public static void main(String[] args) {
        //创建ArrayList集合,存放扑克牌
        ArrayList<String> arrayList = new ArrayList<String>();

        //创建所有牌,并把每一张牌放入集合中
        String[] flowers = {"♣", "♦", "♥", "♠"};
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};

        //组合每一张牌
        for (String number : numbers) {
            for (String flower : flowers) {
                arrayList.add(flower + number);
            }
        }
        arrayList.add("大王");
        arrayList.add("小王");

        //打乱牌
        Collections.shuffle(arrayList);

        //发牌,遍历集合,分配给三个玩家
        ArrayList<String> ZJSJ = new ArrayList<String>();
        ArrayList<String> ZPP = new ArrayList<String>();
        ArrayList<String> GS = new ArrayList<String>();
        ArrayList<String> dp = new ArrayList<String>();

        for (int i = 0; i < arrayList.size(); i++) {
            String poker = arrayList.get(i);
            if (i >= arrayList.size() - 3) {
                dp.add(poker);
            } else if (i % 3 == 0) {
                ZJSJ.add(poker);
            } else if (i % 3 == 1) {
                ZPP.add(poker);
            } else if (i % 3 == 2) {
                GS.add(poker);
            }
        }

        //看牌,遍历自己的牌
        lookPoker("张嘉圣杰", ZJSJ);
        lookPoker("张飘飘", ZPP);
        lookPoker("郭少", GS);
        lookPoker("底牌", dp);

    }

    public static void lookPoker(String name, ArrayList<String> arrayList) {
        System.out.println(name + "的牌是");
        for (String pokers : arrayList) {
            String s = pokers;
            System.out.print("\t" + pokers);
        }
        System.out.println();
    }
    /**
     * 张嘉圣杰的牌是
     * 	♠3	♥7	♥Q	♥9	♦6	♣A	♣3	♠8	♣8	♦10	♣5	♠5	♠K	♦7	♦J	♥6	♥2
     * 张飘飘的牌是
     * 	♥K	♣J	♣9	♠A	♠J	♦9	♦4	♥4	♦Q	♠6	♠Q	♦8	♣10	♦5	♣4	♥3	大王
     * 郭少的牌是
     * 	♠10	♥5	♦3	♦2	♠4	♣6	♠7	♦K	♣K	♥8	♥10	小王	♣7	♥A	♦A	♣Q	♣2
     * 底牌的牌是
     * 	♥J	♠2	♠9
     * 	*/

3.模拟斗地主随机发牌(将发好的牌排序)

java
    public static void main(String[] args) {
        //创建HashMap,键是编号,值是牌
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();

        //创建ArrayList存储编号
        ArrayList<Integer> arrayList = new ArrayList<Integer>();

        //创建花色数组和点数数组
        String[] flowers = {"♣", "♦", "♥", "♠"};
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};

        //从0开始向HashMap里存储编号,并存储对应的牌,同时向ArrayList里面存储编号
        int index = 0;
        for (String number : numbers) {
            for (String flower : flowers) {
                hashMap.put(index, flower + number);
                arrayList.add(index);
                index++;
            }
        }
        hashMap.put(index, "大王");
        arrayList.add(index);
        index++;
        hashMap.put(index, "小王");
        arrayList.add(index);

        //洗牌
        Collections.shuffle(arrayList);

        //发牌
        TreeSet<Integer> ZJSJ = new TreeSet<Integer>();
        TreeSet<Integer> ZPP = new TreeSet<Integer>();
        TreeSet<Integer> GS = new TreeSet<Integer>();
        TreeSet<Integer> DP = new TreeSet<Integer>();

        for (int i = 0; i < arrayList.size(); i++) {
            int index_number = arrayList.get(i);
            if (i >= arrayList.size() - 3) {
                DP.add(index_number);
            } else if (i % 3 == 0) {
                ZJSJ.add(index_number);
            } else if (i % 3 == 1) {
                ZPP.add(index_number);
            } else if (i % 3 == 2) {
                GS.add(index_number);
            }
        }

        //看牌
        lookPoker("张嘉圣杰", ZJSJ, hashMap);
        lookPoker("张飘飘", ZPP, hashMap);
        lookPoker("郭少", GS, hashMap);
        lookPoker("底牌", DP, hashMap);
    }

    public static void lookPoker(String name, TreeSet<Integer> treeSet, HashMap<Integer, String> hashMap) {
        System.out.println(name + "的牌是:");

        for (Integer key : treeSet) {
            String s = hashMap.get(key);
            System.out.print("\t" + s);
        }
        System.out.println();
    }
    /**张嘉圣杰的牌是:
     ♥2	♠3	♣4	♦4	♣8	♦9	♠9	♣10	♥10	♠10	♥J	♠J	♦Q	♠Q	♠K	大王	小王
     张飘飘的牌是:
     ♣2	♥3	♣5	♦5	♣6	♦6	♥6	♠6	♦7	♥7	♦8	♠8	♥9	♦10	♥Q	♥A	♠A
     郭少的牌是:
     ♦2	♠2	♣3	♦3	♥4	♠4	♥5	♠5	♠7	♥8	♣9	♣J	♦J	♣Q	♣K	♥K	♦A
     底牌的牌是:
     ♣7	♦K	♣A
     */