笔记:Java中Conllections运用完成模拟斗地主

Collection和Collections的区别:

  • Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。
  • Java中还有一个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): 使用默认的随机源随机排列指定的列表
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
       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): 使用默认的随机源随机排列指定的列表

 */

public class CollectionsDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<Integer> list = new ArrayList<>();

        //添加元素
        list.add(30);
        list.add(32);
        list.add(23);
        list.add(19);

        //  public static <T extends Comparable<? super T>> void sort(List<T> list):
        //  将指定的列表按升序排序
//        Collections.sort(list);

        //  public static void reverse(List<?> list):
        //  反转指定列表中元素的顺序
//        Collections.reverse(list);

        //  public static void shuffle(List<?> list):
        //  使用默认的随机源随机排列指定的列表
        Collections.shuffle(list);//随机排序,比如引用到洗扑克牌

        System.out.println(list);
    }
}
  • ArrayList存储学生对象,使用Collections对ArrayList进行排序
  • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母进行排序
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

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

/*
   ArrayList存储学生对象,使用Collections对ArrayList进行排序
   要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母进行排序
*/
public class CollectionsDemo {
    public static void main(String[] args) {
        //创建ArrayList集合对象
        ArrayList<Student> array = new ArrayList<Student>();

        //创建学生对象
        Student s1 = new Student("zhangtongtong",23);
        Student s2 = new Student("lishanshan",22);
        Student s3 = new Student("xietingting",22);

        //把学生添加到集合
        array.add(s1);
        array.add(s2);
        array.add(s3);

        //使用Collections对ArrayList集合排序
        Collections.sort(array,new Comparator<Student>(){ //比较器,匿名内部类
           public int compare(Student s1,Student s2){
               int num1 = s1.getAge() - s2.getAge();
               int num2 = num1 ==0 ? s1.getName().compareTo(s2.getName()):num1;
               return num2;
           }
        } );

        //遍历集合
        for(Student s:array){
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}

模拟斗地主

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

/*
    模拟斗地主
    思路:
        ①创建-个牌盒,也就是定义一个集合对象,用ArrayList集合实现
        ②往牌盒里面装牌
        ③洗牌,也就是把牌打撒,用Collections的shuffle0方法实现
        ④发牌,也就是遍历集合,给三个玩家发牌
        ⑤看牌,也就是三个玩家分别遍历自己的牌

 */
public class CollectionsDemo {
    public static void main(String[] args) {
        // ①创建-个牌盒,也就是定义一个集合对象,用ArrayList集合实现
        ArrayList<String> array = new ArrayList<>();

        // ②往牌盒里面装牌
        /*
            ♥,♠,♦,♣
            小王,大王
         */
        //定义花色数组
        String[] colors = {"♥","♠","♦","♣"};
        //定义点数数组
        String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        for(String color:colors){
            for (String number:numbers){
                array.add(color+number);
            }
        }
        array.add("小王");
        array.add("大王");

        // ③洗牌,也就是把牌打撒,用Collections的shuffle()方法实现
        //使用Conllections.shuffle(...);洗牌
        Collections.shuffle(array);

//        System.out.println(array);

        //发牌,也就是遍历集合,给三个玩家发牌
        // ④发牌,也就是遍历集合,给三个玩家发牌
        //创建三个玩家 + 底牌
        ArrayList<String> er1 = new ArrayList<>();//玩家一
        ArrayList<String> er2 = new ArrayList<>();//玩家二
        ArrayList<String> er3 = new ArrayList<>();//玩家三
        ArrayList<String> dp = new ArrayList<>();//底牌
        //遍历
        for(int i= 0;i<array.size();i++){
            String poker = array.get(i);

            if(i >= array.size()-3){
                dp.add(poker);
            }else if(i%3==0){
                er1.add(poker);
            }else if(i%3==1){
                er2.add(poker);
            }else if(i%3==2){
                er3.add(poker);
            }
        }

        //⑤看牌,也就是三个玩家分别遍历自己的牌
        lookPoker("张彤彤",er1);
        lookPoker("李珊珊",er2);
        lookPoker("杜美美",er3);
        lookPoker("底牌",dp);

        }
        public static void lookPoker(String name,ArrayList<String> array){
            System.out.println(name+"的牌是:");
            for (String poker : array){
                System.out.print(poker+" ");
            }
            System.out.println();
    }
}

这里是引用

模拟斗地主增强版(加入排序)

/*
    需求:
        通过程序实现斗地主过程中的提牌,发牌和看牌。要求, 对牌进行携序
    思踏:
        1:创建HoshMop,健是编号,值是牌
        2:创建Arraylist.存储编号
        3:创建花色数组和点数数组
        4:从开始往HoshNop里面存储编号,并存储对应的牌。同时往Arraylist里面存储编号
        5:洗牌(洗的是编号).用Collections的shuffle()方法实现
        6:发牌(发的也是编号。为了保证编号是排序的。创建TreeSet集合接收)_
        7:定义方法看牌(通历TreeSet集合,获取编号,到HashMop集合找对应的牌)
        8:调用看牌方法

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

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

        //创建ArrayList集合对象,存储编号
        ArrayList<Integer> array = new ArrayList<Integer>();

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

        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);

        //洗牌
        Collections.shuffle(array);
/*
                System.out.println(array);
        创建玩家+底牌
        */

        TreeSet< Integer> er1 = new TreeSet<>();
        TreeSet<Integer> er2 = new TreeSet<>();
        TreeSet<Integer> er3 = new TreeSet<>();
        TreeSet<Integer> dp = new TreeSet<>();

        //遍历集合,发牌
        for (int i = 0;i<array.size();i++){
             int x = array.get(i);
             if(i>=array.size()-3){
                 dp.add(x);
            }else if(i%3==0){
                 er1.add(x);
             }else if(i%3==1){
                 er2.add(x);
             }else if(i%3==2){
                 er3.add(x);
             }
        }
        //调用看牌方法
        lookPoker("张彤彤", er1, hm);
        lookPoker("李珊珊", er2, hm);
        lookPoker("杜美美", er3, hm);
        lookPoker("底牌",dp,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();
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听原来是雨落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值