Collections
Collections概述和使用
是针对集合操作的工具类
//创建集合对象
List list = new ArrayList();
//添加元素
list.add(30);
list.add(20);
list.add(50);
list.add(10);
list.add(40);
//将指定的列表按升序(自然顺序)排序
Collection.sort(list);
//反转列表中元素的顺序
Collection.reverse(list);
//随机排列列表中的元素
Collection.shuffle(list);
sout(list);
升序
反转
随机排序
案例 ArrayList集合存储学生对象并排序
学生
创建集合对象 把学生添加到集合
//使用Collections对ArrayList集合排序 利用比较器Comparator进行
Collection.sort(array,new Comparator(){
@Override
public int compare(Student s1,Student s2){
//按照年龄从小到大排序
int num = s1.getAge()-s2.getAge();
//年龄相同时按照字母顺序排序
int num2 = num==0?s1.getName().CompareTo(s2.getName()):num;
return num2;
}
});
//遍历集合
for(Student s : array){
sout(s.getName()+","+s.getAge());
}
输出
案例 模拟斗地主
//创建一个牌盒,也就是定义一个集合对象,用Arraylist集合实现
Arraylist array = 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){
array.add(color+number);
}
}
array.add("大王");
array.add("小王");
//洗牌也就是把牌打散,用Collections的shuffle()方法实现
Collections.shuffle(array);
/发牌,也就是遍历集合给三个玩家发牌
//创建三个集合
Arraylist laqArray = new Arraylist();
Arraylist lyArray = new Arraylist();
Arraylist fqyArray = new Arraylist();
Arraylist dpArray = new Arraylist();//留三张底牌
//发牌
for(int i = 0,i=array.size()-3){
dpArray.add(poker);
}else if(i%3==0){
laqArray.add(poker);
}else if(i%3==1){
lyArray.add(poker);
}else if(i%3==2){
fqyArray.add(poker);
}
}
//看牌 三个玩家分别遍历自己的牌
lookPoker(name:"林青霞",laqArray);
lookPoker(name:"柳岩",lyArray);
lookPoker(name:"风清扬",fqyArray);
lookPoker(name:"底牌",dpArray);
//写一个方法实现 看牌的方法
public static void lookPoker(String name,Arraylist a
rray){
System.out.print(name + "的牌是");
for(String poker : array){
System.out.print(poker+" ")
}
sout();
}
结果输出
案例 模拟斗地主升级版
对拿到的牌进行排序
//创建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);
//洗牌,洗得编号
Collections.shuffle(array);
//发牌 发的是编号,为了保证编号是排序的,创建TreeSet集合接收
TreeSet lqxSet = new TreeSet();
TreeSet lySet = new TreeSet();
TreeSet fqySety = new TreeSet();
TreeSet dpSet = new TreeSet();//留三张底牌
//通过for循环实现发牌
for(int i = 0,i=array.size()-3){
dpSet.add(x);
}else if(i%3==0){
lqxSet.add(x);
}else if(i%3==1){
lySet.add(x);
}else if(i%3==2){
fqySet.add(x);
}
}
//调用看牌方法看牌
lookPoker(name:"林青霞",lqxArray,hm);
lookPoker(name:"柳岩",lyArray,hm);
lookPoker(name:"风清扬",fqyArray,hm);
lookPoker(name:"底牌",dpArray,hm);
//定义方法来看牌 遍历TreeSet集合,获取编号,到HashMap集合找对应的牌
public static void lookPoker(String name,TreeSet ts,HashMap hm){
System.out.print(name + "的牌是");
for(Integer key : ts){
String poker = hm.get(key);
System.out.print(poker+" ")
}
sout();
}
结果输出