当前位置: 首页 > article >正文

ArrayList简单的洗牌算法

ArrayList简介

在集合框架中, ArrayList 是一个普通的类,实现了 List 接口
1. ArrayList 是以泛型方式实现的,使用时必须要先实例化
2. ArrayList 实现了 RandomAccess 接口,表明 ArrayList 支持随机访问
3. ArrayList 实现了 Cloneable 接口,表明 ArrayList 是可以 clone
4. ArrayList 实现了 Serializable 接口,表明 ArrayList 是支持序列化的
5. Vector 不同, ArrayList 不是线程安全的,在单线程下可以使用,在多线程中可以选择 Vector 或者 CopyOnWriteArrayList
6. ArrayList 底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

ArrayList的构造

ArrayList常见操作

ArrayList虽然提供的方法比较多,但是常用方法如下所示 

方法
解释
boolean add(E e)尾插 e
void add(int index, E element) e 插入到 index 位置
boolean addAll(Collection<? extends E> c)尾插 c 中的元素
E remove(int index)删除 index 位置元素
boolean remove(Object o)删除遇到的第一个 o
E get(int index)
获取下标 index 位置元素
E set(int index, E element)将下标 index 位置元素设置为 element
void clear()清空
boolean contains(Object o)判断 o 是否在线性表中
int indexOf(Object o)返回第一个 o 所在下标
int lastIndexOf(Object o)返回最后一个 o 的下标
List<E> subList(int fromIndex, int toIndex)截取部分 list

简单的洗牌算法

代码分为两部分,牌的初始化和洗牌

牌的初始化:

package demo;


public class Card {
    private String suit;//花色
    private int rank;//扑克的数字

    public Card(String suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "花色:" + suit + "数字:" + rank ;
    }

    public String getSuit() {
        return suit;
    }

    public void setSuit(String suit) {
        this.suit = suit;
    }

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }
}

洗牌:

package demo;

import com.sun.org.apache.bcel.internal.generic.SWAP;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class CardList {
    //先定义花色数组,花色是常量
    private static final String[] SUIT={"♦","♣","♠","♥"};//被final修饰后大写
    //买牌
    public static List<Card> BuyCards(){
        List<Card> list=new ArrayList<>();
        for (int i = 0; i < SUIT.length; i++) {
            for (int j = 0; j < 13; j++) {
                Card card=new Card(SUIT[i],j);
                list.add(card);
            }
        }
        return list;
    }

    public static void SWAP(List<Card> list,int i,int j) {
        Card tmp=list.get(i);
        list.set(i,list.get(j));
        list.set(j,tmp);
    }
    //洗牌
    public static void shuffle(List<Card> list) {
        Random random=new Random();
        //从后往前生成随机数
        for (int i = list.size()-1; i > 0; i--) {
            int index= random.nextInt(i);
            SWAP(list,index,i);
        }
    }
    public static void main(String[] args) {
        List<Card> list=BuyCards();
        System.out.println(list);
        System.out.println("洗过的牌");
        shuffle(list);
        System.out.println(list);
        //三个人,每人轮流抓5张牌
        //一人5张牌,三个人,所以要用二维数组来写
        List<List<Card>> hand=new ArrayList<>();
        List<Card> hand1=new ArrayList<>();
        List<Card> hand2=new ArrayList<>();
        List<Card> hand3=new ArrayList<>();
        //把他们串起来,加进去
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        //控制次数
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                //每次揭牌都是0下标的牌,因为每次揭走就被删除了
                Card card=list.remove(0);
                hand.get(j).add(card);
            }
        }
        //查看三个人揭到的牌
        System.out.println("第一个人的牌:"+hand.get(0));
        System.out.println("第一个人的牌:"+hand.get(1));
        System.out.println("第一个人的牌:"+hand.get(2));
        System.out.println("剩下的牌:"+list);
    }
}

结果:


http://www.kler.cn/a/370546.html

相关文章:

  • C++Socket通讯样例(服务端)
  • Vue 权限管理
  • STM32 第3章 如何用串口下载程序
  • 快消品行业数字化转型:定制开发 S2B2C 商城小程序的主战场选择与突破
  • windows环境下,使用docker搭建redis集群
  • .NET Core WebApi第5讲:接口传参实现、数据获取流程、204状态码问题
  • Flutter之build 方法详解
  • 第15课 算法(上)
  • 海外学子如何玩转反向代购,解锁财富密码!
  • 数据库的开发---实训报告
  • React Intl 的工作原理
  • Knife4j配置 ▎使用 ▎教程 ▎实例
  • Peach-9B-8k-Roleplay模型部署指南
  • 利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布
  • 为什么架构设计禁止IP直连?
  • 网管平台(进阶篇):网管软件的配置方式
  • 数据库产品中SQL注入防护功能应该包含哪些功能
  • Golang | Leetcode Golang题解之第515题在每个树行中找最大值
  • Android 相机CameraX框架
  • 【面试】rabbitmq的主要组件有哪些?