目录
- Collections类概述
- 用Collections类的sort()方法对ArrayList集合元素排序
- 模拟斗地主过程中的洗牌,发牌和看牌
- 模拟斗地主升级版
Collections类的概述
- 是针对集合操作的工具类
- public static
> 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 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]
package collection;
import java.util.*;
public class CollectionsTest {
public static void main(String[] args) {
sortArrayList();
}
public static void sortArrayList(){
ArrayList 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() {
@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
package collection;
import java.util.ArrayList;
import java.util.Collections;
public class FightLandLord {
public static void main(String[] args) {
//创建一个牌盒,也就是创建一个集合对象,用ArrayList实现
ArrayList 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 youArray = new ArrayList<>();
ArrayList meArray = new ArrayList<>();
ArrayList heArray = new ArrayList<>();
ArrayList dpArray = new ArrayList<>();
for(int i=0;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
运行结果为
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 hm = new HashMap<>();
//创建ArrayList,存储编号
ArrayList 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 youSet = new TreeSet<>();
TreeSet meSet = new TreeSet<>();
TreeSet heSet = new TreeSet<>();
TreeSet dpSet = new TreeSet<>();
for(int i=0;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 ts,HashMap 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



