关于List的常用方法和扑克牌练习

package package10_29;

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

public class TestList {
    public static void main(String[] args) {
        //1.创建list的实例
        List<String> list = new ArrayList<>();
        //2.插入元素
        list.add("C语言");
        list.add("Java");
        list.add("C++");
        list.add("Python");
        System.out.println(list);
        //3.按下标访问,高效
        System.out.println(list.get(0));//因为运算符重载,不能list[0]这样访问
        list.set(0,"PHP");//set不能插入新的元素,只能修改现有元素,也就是下标不能越界。
        System.out.println(list.get(0));

        //4截取部分内容
        System.out.println(list.subList(1,3));//前闭后开
        List<String> list2 = list.subList(1,3);
        list2.set(0,"Php");
        System.out.println(list);
        System.out.println(list2);
    }
}

这里需要注意,如果改了list2发现list1也变了,说明list2是list1的浅拷贝。

[C语言, Java, C++, Python]
C语言
PHP
[Java, C++]
[PHP, Php, C++, Python]
[Php, C++]

说明sublist是一份浅拷贝

		//5重新构造
        List<String> list2 = new ArrayList<>(list);
        list2.set(0,"PHP");
        System.out.println(list);
        System.out.println(list2);

[C语言, Java, C++, Python]
[PHP, Java, C++, Python]

这样new一个新链表,这样修改list2,并不会影响list。这样就是深拷贝。

扑克牌练习

package package10_29;

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

class Card{
    public String suit;//花色
    public String rank;

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

    @Override
    public String toString() {
        return "(" + suit + " " + rank + ")" ;
    }
}

public class CardDemo {
    public static final String[] SUITS = {"♥","♠","♣","♦"};
    public static List<Card> buyPoker(){
        List<Card> poker = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            //负责构建四种花色
            for (int j = 2; j < 10; j++) {
                poker.add(new Card(SUITS[i],j + ""));
            }
            poker.add(new Card(SUITS[i],"J"));
            poker.add(new Card(SUITS[i],"Q"));
            poker.add(new Card(SUITS[i],"K"));
            poker.add(new Card(SUITS[i],"A"));
        }
        return poker;
    }
    public static void main(String[] args) {
        //1.创建一副牌
        System.out.println("创建一副牌");
        List<Card> poker = buyPoker();

        //2.洗牌操作
        Collections.shuffle(poker);

        //3.发牌(有三个人,每个人5张牌)
        //第一个List表示三个玩家,每个玩家手里五张牌,再用一个List表示
        List<List<Card>> players = new ArrayList<>();
        //这三个新增的列表表示三个玩家的三幅手牌
        players.add(new ArrayList<Card>());
        players.add(new ArrayList<Card>());
        players.add(new ArrayList<Card>());
        //把牌发给三个玩家
        for(int carIndex = 0;carIndex < 5;carIndex++){
            for (int playerIndex = 0;playerIndex < 3;playerIndex++){
                //players.get(playerIndex).add(poker.remove(0));
                List<Card> playerCards = players.get(playerIndex);
                Card curCad = poker.remove(0);
                playerCards.add(curCad);
            }
        }

        //4.输出玩家手牌
        System.out.println("玩家1:");
        System.out.println(players.get(0));
        System.out.println("玩家2:");
        System.out.println(players.get(1));
        System.out.println("玩家3:");
        System.out.println(players.get(2));
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值