Collections
Collections 概述和应用
是针对汇合操作的工具类
// 创立汇合对象
List<Integer> list = new ArrayList<Integer>();
// 增加元素
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<Student>(){
@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<String> array = new Arraylist<String>();
// 往牌盒外面装牌
// 方片 梅花 红桃 黑桃 大小王
// 定义花色数组
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<String> laqArray = new Arraylist<String>();
Arraylist<String> lyArray = new Arraylist<String>();
Arraylist<String> fqyArray = new Arraylist<String>();
Arraylist<String> dpArray = new Arraylist<String>();// 留三张底牌
// 发牌
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){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<String> a
rray){System.out.print(name + "的牌是");
for(String poker : array){System.out.print(poker+" ")
}
sout();}
后果输入
案例 模仿斗地主升级版
对拿到的牌进行排序
// 创立 HashMap 汇合,键是编号,值是牌
HashMap<Integer,String> hm = new HashMap<Integer,String>();
// 创立 ArrayList 汇合,存储编号
Arraylist<Integer> array = new Arraylist<Integer>();
// 定义花色数组
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<Integer> lqxSet = new TreeSet<Integer>();
TreeSet<Integer> lySet = new TreeSet<Integer>();
TreeSet<Integer> fqySety = new TreeSet<Integer>();
TreeSet<Integer> dpSet = new TreeSet<Integer>();// 留三张底牌
// 通过 for 循环实现发牌
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){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<Integer> ts,HashMap<Integer,String> hm){System.out.print(name + "的牌是");
for(Integer key : ts){String poker = hm.get(key);
System.out.print(poker+" ")
}
sout();}
后果输入