目录

  1. Collections类概述
  2. 用Collections类的sort()方法对ArrayList集合元素排序
  3. 模拟斗地主过程中的洗牌,发牌和看牌
  4. 模拟斗地主升级版

1. Collections类概述

Collections类的概述

  • 是针对集合操作的工具类

Collections类的常用方法


  • public static <T extends Comparable <? super T>> void sort(List list):将指定的列表按升序排序
  • public static void reverse (List<?> list):反转指定列表中元素的顺序
  • public static void shuffle (List<?> list):使用默认的随机源随机排列指定的列表
package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CollectionsTest {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(30);
        list.add(20);
        list.add(50);
        list.add(10);
        list.add(40);

        Collections.sort(list);  //[10, 20, 30, 40, 50]
        System.out.println("sort:"+list);
        Collections.reverse(list);
        System.out.println("reverse:"+list);
        Collections.shuffle(list);
        System.out.println("shuffle:"+list);
    }
}

运行结果为

sort:[10, 20, 30, 40, 50]
reverse:[50, 40, 30, 20, 10]
shuffle:[10, 50, 20, 30, 40]



2. 用Collections类对ArrayList集合元素排序

java对Collection便利 java collections_java

package collection;

import java.util.*;

public class CollectionsTest {
    public static void main(String[] args) {
        sortArrayList();
    }
    public static void sortArrayList(){
        ArrayList<Mentor> list = new ArrayList<>();
        Mentor m1 = new Mentor("damo",30);
        Mentor m2 = new Mentor("lixin",20);
        Mentor m3 = new Mentor("laofuzi",100);
        Mentor m4 = new Mentor("huamulan",30);

        list.add(m1);
        list.add(m2);
        list.add(m3);
        list.add(m4);

        Collections.sort(list, new Comparator<Mentor>() {
            @Override
            public int compare(Mentor m1, Mentor m2) {
                int num = m1.getAge() - m2.getAge();
                int num2 = num==0?m1.getName().compareTo(m2.getName()):num;
                return num2;
            }
        });
        for(Mentor m : list){
            System.out.println(m.getName()+","+m.getAge());
        }
    }
}

运行结果为

lixin,20
damo,30
huamulan,30
laofuzi,100



3. 模拟斗地主过程中的洗牌,发牌和看牌

java对Collection便利 java collections_java对Collection便利_02

package collection;

import java.util.ArrayList;
import java.util.Collections;

public class FightLandLord {
    public static void main(String[] args) {
        //创建一个牌盒,也就是创建一个集合对象,用ArrayList实现
        ArrayList<String> array = new ArrayList<>();
        String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        String[] colors = {"方块","梅花","红桃","黑桃"};
        for(String color : colors){
            for(String number : numbers){
                array.add(color+number);
            }
        }
        array.add("小王");
        array.add("大王");

        //洗牌,也就是把牌打散,用Collections的shuffle()实现
        Collections.shuffle(array);

        //发牌,也就是遍历集合,给三个玩家发牌
        ArrayList<String> youArray = new ArrayList<>();
        ArrayList<String> meArray = new ArrayList<>();
        ArrayList<String> heArray = new ArrayList<>();
        ArrayList<String> dpArray = new ArrayList<>();

        for(int i=0;i<array.size();i++){
            String poker = array.get(i);
            if(i>=array.size()-3){
                dpArray.add(poker);
            }else if(i%3==0){
                youArray.add(poker);
            }else if(i%3==1){
                meArray.add(poker);
            }else if(i%3==2){
                heArray.add(poker);
            }
        }
        //看牌,也就是三个玩家分别遍历自己的牌
        lookPoker("you",youArray);
        lookPoker("me",meArray);
        lookPoker("he",heArray);
        lookPoker("底牌",dpArray);
    }
    public static void lookPoker(String name,ArrayList list){
        System.out.print(name+"的牌是:");
        for(int i=0;i<list.size();i++){
            System.out.print(list.get(i)+" ");
        }
        System.out.println();
    }
}

运行结果为

you的牌是:梅花2 梅花A 方块7 方块2 黑桃2 梅花4 方块K 红桃3 黑桃Q 红桃10 红桃9 黑桃3 红桃6 梅花J 方块J 梅花7 梅花5
me的牌是:黑桃K 梅花K 红桃J 梅花3 黑桃9 红桃Q 方块4 黑桃4 大王 方块5 方块9 红桃7 黑桃8 红桃5 红桃2 方块Q 小王
he的牌是:黑桃10 梅花Q 红桃A 梅花6 梅花9 梅花8 方块A 黑桃J 方块3 方块6 黑桃5 红桃K 黑桃7 方块8 黑桃6 红桃4 梅花10
底牌的牌是:黑桃A 方块10 红桃8



4. 模拟斗地主升级版

java对Collection便利 java collections_java_03

package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

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

        //创建ArrayList,存储编号
        ArrayList<Integer> array = new ArrayList<>();
        //创建花色数组和点色数组
        String[] colors = {"方块","梅花","红桃","黑桃"};
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

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

        //洗牌(洗的是编号),用Collections的shuffle()方法实现
        Collections.shuffle(array);

        //发牌(发的也是编号,为了保证编号是有序的,这里用TreeSet接收)
        TreeSet<Integer> youSet = new TreeSet<>();
        TreeSet<Integer> meSet = new TreeSet<>();
        TreeSet<Integer> heSet = new TreeSet<>();
        TreeSet<Integer> dpSet = new TreeSet<>();
        for(int i=0;i<array.size();i++){
            int x = array.get(i);
            if(i>=array.size()-3){
                dpSet.add(x);
            }else if(i%3==0){
                youSet.add(x);
            }else if(i%3==1){
                meSet.add(x);
            }else if(i%3==2){
                heSet.add(x);
            }
        }
        lookPoker("you",youSet,hm);
        lookPoker("me",meSet,hm);
        lookPoker("he",heSet,hm);
    }
    //定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
    public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
        System.out.println(name+"的牌是:");
        for(Integer key: ts){
            String poker = hm.get(key);
            System.out.print(poker+" ");
        }
        System.out.println();
    }
}

运行结果为

you的牌是:方块3 红桃3 红桃4 黑桃4 黑桃6 方块7 梅花7 红桃7 方块8 梅花9 红桃9 红桃J 红桃Q 梅花A 黑桃A 方块2 小王
me的牌是:梅花5 红桃5 梅花6 红桃6 黑桃7 梅花8 红桃8 梅花10 红桃10 黑桃10 梅花J 方块Q 方块K 红桃K 方块A 梅花2 红桃2
he的牌是:梅花3 黑桃3 方块4 方块5 黑桃5 方块6 方块9 黑桃9 方块10 方块J 黑桃J 梅花Q 梅花K 黑桃K 红桃A 黑桃2 大王
底牌的牌是:梅花4 黑桃8 黑桃Q