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