目录
- Collections类概述
- 用Collections类的sort()方法对ArrayList集合元素排序
- 模拟斗地主过程中的洗牌,发牌和看牌
- 模拟斗地主升级版
1. Collections类概述
Collections类的概述
- 是针对集合操作的工具类
Collections类的常用方法
- public static <T extends Comparable <? super T>> void sort(List list):将指定的列表按升序排序
- public static void reverse (List<?> list):反转指定列表中元素的顺序
- public static void shuffle (List<?> list):使用默认的随机源随机排列指定的列表
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
Collections.sort(list); //[10, 20, 30, 40, 50]
System.out.println("sort:"+list);
Collections.reverse(list);
System.out.println("reverse:"+list);
Collections.shuffle(list);
System.out.println("shuffle:"+list);
}
}
运行结果为
sort:[10, 20, 30, 40, 50]
reverse:[50, 40, 30, 20, 10]
shuffle:[10, 50, 20, 30, 40]
2. 用Collections类对ArrayList集合元素排序
package collection;
import java.util.*;
public class CollectionsTest {
public static void main(String[] args) {
sortArrayList();
}
public static void sortArrayList(){
ArrayList<Mentor> list = new ArrayList<>();
Mentor m1 = new Mentor("damo",30);
Mentor m2 = new Mentor("lixin",20);
Mentor m3 = new Mentor("laofuzi",100);
Mentor m4 = new Mentor("huamulan",30);
list.add(m1);
list.add(m2);
list.add(m3);
list.add(m4);
Collections.sort(list, new Comparator<Mentor>() {
@Override
public int compare(Mentor m1, Mentor m2) {
int num = m1.getAge() - m2.getAge();
int num2 = num==0?m1.getName().compareTo(m2.getName()):num;
return num2;
}
});
for(Mentor m : list){
System.out.println(m.getName()+","+m.getAge());
}
}
}
运行结果为
lixin,20
damo,30
huamulan,30
laofuzi,100
3. 模拟斗地主过程中的洗牌,发牌和看牌
package collection;
import java.util.ArrayList;
import java.util.Collections;
public class FightLandLord {
public static void main(String[] args) {
//创建一个牌盒,也就是创建一个集合对象,用ArrayList实现
ArrayList<String> array = new ArrayList<>();
String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] colors = {"方块","梅花","红桃","黑桃"};
for(String color : colors){
for(String number : numbers){
array.add(color+number);
}
}
array.add("小王");
array.add("大王");
//洗牌,也就是把牌打散,用Collections的shuffle()实现
Collections.shuffle(array);
//发牌,也就是遍历集合,给三个玩家发牌
ArrayList<String> youArray = new ArrayList<>();
ArrayList<String> meArray = new ArrayList<>();
ArrayList<String> heArray = new ArrayList<>();
ArrayList<String> dpArray = new ArrayList<>();
for(int i=0;i<array.size();i++){
String poker = array.get(i);
if(i>=array.size()-3){
dpArray.add(poker);
}else if(i%3==0){
youArray.add(poker);
}else if(i%3==1){
meArray.add(poker);
}else if(i%3==2){
heArray.add(poker);
}
}
//看牌,也就是三个玩家分别遍历自己的牌
lookPoker("you",youArray);
lookPoker("me",meArray);
lookPoker("he",heArray);
lookPoker("底牌",dpArray);
}
public static void lookPoker(String name,ArrayList list){
System.out.print(name+"的牌是:");
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
System.out.println();
}
}
运行结果为
you的牌是:梅花2 梅花A 方块7 方块2 黑桃2 梅花4 方块K 红桃3 黑桃Q 红桃10 红桃9 黑桃3 红桃6 梅花J 方块J 梅花7 梅花5
me的牌是:黑桃K 梅花K 红桃J 梅花3 黑桃9 红桃Q 方块4 黑桃4 大王 方块5 方块9 红桃7 黑桃8 红桃5 红桃2 方块Q 小王
he的牌是:黑桃10 梅花Q 红桃A 梅花6 梅花9 梅花8 方块A 黑桃J 方块3 方块6 黑桃5 红桃K 黑桃7 方块8 黑桃6 红桃4 梅花10
底牌的牌是:黑桃A 方块10 红桃8
4. 模拟斗地主升级版
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class FightLandLordUp {
public static void main(String[] args) {
//创建HashMap,键是编号,值是牌
HashMap<Integer,String> hm = new HashMap<>();
//创建ArrayList,存储编号
ArrayList<Integer> array = new ArrayList<>();
//创建花色数组和点色数组
String[] colors = {"方块","梅花","红桃","黑桃"};
String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里存储编号
int index = 0;
for(String number:numbers){
for(String color : colors){
hm.put(index,color+number);
array.add(index);
index++;
}
}
hm.put(index,"小王");
array.add(index);
index++;
hm.put(index,"大王");
array.add(index);
index++;
//洗牌(洗的是编号),用Collections的shuffle()方法实现
Collections.shuffle(array);
//发牌(发的也是编号,为了保证编号是有序的,这里用TreeSet接收)
TreeSet<Integer> youSet = new TreeSet<>();
TreeSet<Integer> meSet = new TreeSet<>();
TreeSet<Integer> heSet = new TreeSet<>();
TreeSet<Integer> dpSet = new TreeSet<>();
for(int i=0;i<array.size();i++){
int x = array.get(i);
if(i>=array.size()-3){
dpSet.add(x);
}else if(i%3==0){
youSet.add(x);
}else if(i%3==1){
meSet.add(x);
}else if(i%3==2){
heSet.add(x);
}
}
lookPoker("you",youSet,hm);
lookPoker("me",meSet,hm);
lookPoker("he",heSet,hm);
}
//定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
System.out.println(name+"的牌是:");
for(Integer key: ts){
String poker = hm.get(key);
System.out.print(poker+" ");
}
System.out.println();
}
}
运行结果为
you的牌是:方块3 红桃3 红桃4 黑桃4 黑桃6 方块7 梅花7 红桃7 方块8 梅花9 红桃9 红桃J 红桃Q 梅花A 黑桃A 方块2 小王
me的牌是:梅花5 红桃5 梅花6 红桃6 黑桃7 梅花8 红桃8 梅花10 红桃10 黑桃10 梅花J 方块Q 方块K 红桃K 方块A 梅花2 红桃2
he的牌是:梅花3 黑桃3 方块4 方块5 黑桃5 方块6 方块9 黑桃9 方块10 方块J 黑桃J 梅花Q 梅花K 黑桃K 红桃A 黑桃2 大王
底牌的牌是:梅花4 黑桃8 黑桃Q