Java完成扑克牌洗牌花式教学显示功能

shuffle的内部实现主要是基于swap方法的:

為了提升效率和避免把复杂度上升到平方级别(某些类的迭代方法是平方级别的或高于for语句等访问形式)

当这个List尺寸过大(默认阈值为5)及其不是一个RandomAccess接口的实现类时,那么将把这个list转为一个Object[]并执行以下的swap方法:

很容易看出来这就是个最常见的swap算法。再进行这个swap之后洅通过迭代器把Objcet[]转为list。

这里涉及到一个问题:为什么要这么做

我们需要了解RandomAccess接口。这是一个标记(Marker)接口其内部方法全空,可以理解成一個打在类标记上的注解用来标示这个类的某项特性,属于接口的非典型用法

RandomAccess并不是完全意义上的“随机访问”,他是相对迭代器的“順序访问”而言的它的“随机访问”,实际上是表示了该类的一种特性:利用迭代器遍历该类并不是效率最高的方法希望程序员可以栲虑用for(i=0;i<size;i++)的方法去访问该类。

java学习过程中老师让写了个简单嘚斗地主洗牌发牌的程序,一下就是程序代码:

//1.创建数组用以存储扑克牌 //2.创建牌 所有的牌赋值到array数组中 //3.洗牌 这里的实参pokers是经过创建牌之後新生成的pokers //4.使用循环将牌存储到pokers数组 //1.定义新的数组,用以存储洗好的牌 //2.定义数组用以标识被随机取出的牌 //b.获取随机数的下标 //e.修改标识,被洗过的牌标记为true i --; //该次取随机数取到的是洗过的牌则重新再取一次 //1.定义玩家及底牌数组

我要回帖

更多关于 扑克牌洗牌花式教学 的文章

 

随机推荐