操作集合的工具类:Collections (附带梭哈游戏实现)

来源:互联网 发布:华大基因 云计算 编辑:程序博客网 时间:2024/05/16 18:12

Collections 是java提供的一个操作Set,list和Map的工具类,该工具类里提供了大量方法对集合元素进行排序,查询,和修改等操作,还提供了将集合对象设置为不可变,对集合对象实现同步控制等方法。

排序操作:

void reverse(List list):反转指定List集合中元素的顺序;

void shuffle(List list):对List集合元素进行随机排序(类似与洗牌动作);

void sort(List list):根据元素的自然顺序对元素进行升序排序;

void sort(List list,Comparator c):根据制定的Comparator 产生的顺序对list集合元素进行排序;

void swap(List list,int i,int j): 将指定List集合中的i处元素与j处元素进行交换;

void rotate(List list,int distance):当distance为正数时,将list集合后distance个元素整体移到前面;当diatance为负数时,将list集合的前distance 个元素整体移到后面。该方法不会改变集合的长度。


梭哈游戏代码:

/**
 * 梭哈游戏
 * @author Administrator
 *
 */
public class ShowHand {
    //定义该游戏最多 支持多少玩家
    private    final int PLAY_NUM=5;
    //定义扑克牌的所有花色和数值
    private String[] types={"黑桃","红桃","梅花","方块"};
    private String[] values={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
    //cards 一局游戏中剩下的扑克牌
    private List<String> cards=new LinkedList<String>();
    //定义所有玩家
    private String[] players =new String[PLAY_NUM];
    //多有玩家手上的扑克牌
    private List<String>[]  playersCards=new List[PLAY_NUM];
    
    /**
     * 初始化扑克牌,放入52张,并用shuffle方法将其随机排序
     */
    public void initCards(){
        for(int i=0;i<types.length;i++){
            for(int j=0;j<values.length;j++){
                cards.add(types[i]+values[j]);
            }
        }
        Collections.shuffle(cards);
    }
    /**
     * 初始化玩家,为每个玩家分派用户名
     */
    public void initPlayer(String... names){
        if(names.length>PLAY_NUM){
            System.out.println("玩家数量过多");
            return;
        }
        for(int i=0;i<names.length;i++){
            players[i]=names[i];
        }
    }
    /**
     * 初始化玩家手上的扑克牌,开始每个玩家手上的扑克牌为空
     */
    public void initPlayerCards(){
        for(int i=0;i<players.length;i++){
            if(players[i]!=null && !players[i].equals("")){
                playersCards[i]=new LinkedList<String>();
            }
        }
    }
    
    /**
     * 派发扑克牌
     * @param first 最先派给谁
     */
    public void deliverCard(){
        //依次给位于该指定玩家之前的每个玩家派扑克牌。
        for(int i=0;i<PLAY_NUM;i++){
            if(players[i]!=null){
                playersCards[i].add(cards.get(0));
                cards.remove(0);
            }
        }
    }
    
    /**
     * 输出玩家手上的扑克牌
     * 第一张未做不可见处理
     */
    public void showPlayerCards(){
        for(int i=0;i<PLAY_NUM;i++){
            if(players[i]!=null){
                System.out.print(players[i]+":");
                for(String card:playersCards[i]){
                    System.out.print(card+"\t");
                }
            }
            System.out.println("\n");
        }
    }
    
    public static void main(String[] args)
    {
        ShowHand sh=new ShowHand();
        sh.initPlayer("电脑玩家","玩家1");
        System.out.println(sh.players);
        sh.initCards();
        System.out.println(sh.cards);
        sh.initPlayerCards();
        System.out.println(sh.playersCards);
        //开始派牌
        sh.deliverCard();
        sh.showPlayerCards();
        
        // 此处省略了下注 跟注 等处理
        
        //第二轮派牌
        sh.deliverCard();
        sh.showPlayerCards();
    }
}


查找替换操作:

int binarySearch(List list,Object key):使用二分搜索法搜索指定集合中该对象在集合中的索引,使用该方法必须保证List中的元素已经处于有序的状态。

Object max(Collection coll):根据元素的自然顺序,返回给定集合中的最大元素。

Object max(Collection coll,Comparator comp):根据comp指定的顺序,返回给定集合中的最大元素。

Object min(Collection coll):根据元素的自然顺序,返回给定集合中的最小元素。

Object min(Collection coll,Comparator comp):根据comp指定的顺序,返回给定集合中的最小元素。

void fill(List list,Object obj):使用obj替换list中的所有元素。

int frequency(Collection c,Object o):返回指定元素在集合中的出现次数。

int indexOfSubList(List source,List target):返回子List对象在父List对象中第一次出现的位置索引;如果父List没有出现这样的子List,返回-1。

int lastOfSubList(List source,List target):返回子List对象在父List对象中最后一次出现的位置索引;如果父List没有出现这样的子List,返回-1。

boolean replaceAll(List list,Object oldVal,Object newVal):将指定List中的旧值全部用新值替换。


同步控制:

HashSet,TreeSet,ArrayList,ArrayDeque,LinkedList,HashMap,TreeMap都是线程不安全的,Collections类中提供了多个synchronizedXxx()方法,将指定集合包装成线程安全的集合。

设置不可变集合:

有三类方法,他们的参数为原来的集合对象,返回值为该集合的只读版本。

emptyXxx():返回一个空的,不可变的集合对象,此处的集合可以是List,SortedSet,Set,SortedMap,Map。

singletonXxx():返回一个只包含指定对象(只有一个或一项元素)的,不可变的集合对象,此处的集合可以是List,Map。

unmodifiableXxx():返回指定集合的不可变视图,此处的集合可以是List,SortedSet,Set,SortedMap,Map。




阅读全文
0 0
原创粉丝点击