Collections集合工具类
Collections概述和使用
Collextions类的作用
针对集合操作的工具类
常用方法
方法名 | 说明 |
---|---|
public static void sort(List list) | 将指定的列表按升序排序 |
public static void reverse(List<?> list) | 反转指定列表中元素的顺序 |
public static void shuffle(List<?> list) | 使用默认的随机源随机排列指定的列表 |
模仿斗地主案例
案例需求
通过程序实现斗地主过程中的洗牌,发牌和看牌
import java.util.ArrayList;
import java.util.Collections;
public class PokerDemo{
public static void main(String[] args){
//定义一个集合--用于装牌
ArrayList<String> arr = new ArrayList<>();
//扑克牌的花色
String[] colors = {"♥", "♦", "♠", "♣" };
//扑克牌的点数
String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
//外循环控制花色
for(String color:colors){
//内循环控制点数
for(String number:numbers){
String s=color+number;
arr.add(s);
}
}
arr.add("小王");
arr.add("大王");
System.out.println(arr.size()); //54
System.out.println(arr); //[♥2, ♥3, ♥4, ♥5, ♥6,,,]
//洗牌 public static void shuffle(List<?> list) 使用默认的随机源随机排列指定的列表
Collections.shuffle(arr);
//发牌: 三个玩家,底牌(三张)
ArrayList<String> arr1 = new ArrayList<>(); //一号
ArrayList<String> arr2 = new ArrayList<>(); //二号
ArrayList<String> arr3 = new ArrayList<>(); //三号
ArrayList<String> dp = new ArrayList<>(); //底牌
//遍历arr,一张一张发牌
for(int i=0 ; i< arr.size(); i++ ){
String poker=arr.get(i);
//留下三张底牌
if(i >= arr.size()-3){
dp.add(poker);
}else if(i%3==0){
arr1.add(poker);
}else if(i%3==1){
arr2.add(poker);
}else if(i%3==2){
arr3.add(poker);
}
}
//看牌
//调用看牌的方法
lookPoker("一号",arr1);
lookPoker("二号",arr2);
lookPoker("三号",arr3);
lookPoker("底牌",dp);
}
//定义看牌的方法
public static void lookPoker(String name,ArrayList<String> arr){
System.out.println(name+"的牌是");
for(String poker:arr){
System.out.print(poker+" "); //不换行
}
System.out.println(); //换行
}
}
模拟斗地主案例升级版本
案例需求
通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌进行排序
public class PokerDemo2{
public static void main(String[] args){
//创建HashMap集合<编号,牌>
HashMap<Integer,String> hm = new HashMap<>();
//创建ArrayList集合,存储编号,之后利用Collections.shuffle()洗牌,发牌
ArrayList<Integer> arr = new ArrayList<>();
//创建字符串数组,存储花色
String[] colors={"♦", "♣", "♥", "♠"};
String[] numbers={"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
//添加元素
int index=0; //编号
for (String color:colors){
for(String number:numbers){
hm.put(index,color+number); //添牌,如(0,♣3)。
arr.add(index); //将牌的编号添加进arr集合中
index++; 编号加1
}
}
hm.put(index,"小王");
arr.add(index);
index++;
hm.put(index,"大王");
arr.add(index);
System.out.println(hm);
//{0=♣3, 1=♦3, 2=♥3, 3=♠3, 4=♣4, 5=♦4, 6=♥4, 7=♠4, 8=♣5, 9=♦5, 10=♥5, 11=♠5, 12=♣6, 13=♦6, 14=♥6,,,}
//洗牌 对编号进行随机排序
Collections.shuffle(arr);
//发牌 (发的也是编号,为了保证编号是排序的,创建TreeSet集合接收(TreeSet集合会根据元素进行自然排序))
TreeSet<Integer> t1 = new TreeSet<>();
TreeSet<Integer> t2 = new TreeSet<>();
TreeSet<Integer> t3 = new TreeSet<>();
TreeSet<Integer> dp = new TreeSet<>();
//遍历编号的集合 arr
for (int i = 0; i < arr.size(); i++) {
Integer in = arr.get(i);
if(i>=arr.size()-3){
dp.add(in);
}else if (i%3==0){
t1.add(in);
}else if (i%3==1){
t2.add(in);
}else if(i%3==2){
t3.add(in);
}
}
//调用看牌的方法
look("一号",t1,hm);
look("二号",t2,hm);
look("三号",t3,hm);
look("底牌",dp,hm);
}
//定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
public static void look(String name,TreeSet<Integer> t ,HashMap<Integer,String> hm){
System.out.println(name+"的牌是:");
for(Integer key:t){
String poker=hm.get(key);
System.out.print(poker+" ");
}
System.out.println( );
}
}
}
}