Collections
1.Collections概述和使用
概述
- 是针对集合操作的工具类
- 内部的方法都是静态方法
常用方法
- public static <T extends Comparable<?super T>> void sort(List list);将指定的列表按升序排序
- public static void reverse(List<?>list);反转指定列表中元素的顺序
- public static void shuffle(List<?>list);使用默认的随机源随机排列指定的列表
public static void main(String[] args) {
List<Integer>list=new ArrayList<Integer>();
list.add(10);
list.add(5);
list.add(30);
list.add(20);
Collections.sort(list);
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
Collections.shuffle(list);
System.out.println(list);
}
2.案例
1.ArrayList集合存储学生对象并排序
ArrayList存储学生对象,使用Collections对ArrayList进行排序。要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序。
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
Student student1 = new Student("zhangsan",38);
Student student2 = new Student("lisi",25);
Student student3 = new Student("wangwu",38);
list.add(student1);
list.add(student2);
list.add(student3);
// Collections.sort(list);
Collections.sort(list, new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
int num=o1.getAge()-o2.getAge();
if(num!=0)
return num;
else {
return o1.getName().compareTo(o2.getName());
}
}
});
for(Student s:list)
System.out.println(s.getName()+","+s.getAge());
}
2.模拟斗地主
通过程序实现斗地主过程中的洗牌、发牌和看牌
public static void main(String[] args) {
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)
{
String s=color+number;
array.add(s);
}
}
array.add("大王");
array.add("小王");
Collections.shuffle(array);
ArrayList<String> wanjia1=new ArrayList<String>();
ArrayList<String> wanjia2=new ArrayList<String>();
ArrayList<String> wanjia3=new ArrayList<String>();
ArrayList<String> dipai=new ArrayList<String>();
for(int i=0;i<array.size();i++) {
String p=array.get(i);
if(i<=16)
wanjia1.add(p);
else if(16<i&&i<=33)
wanjia2.add(p);
else if(33<i&&i<=50)
wanjia3.add(p);
else
dipai.add(p);
}
System.out.print("玩家1的牌: ");
for(String s:wanjia1)
System.out.print(s+" ");
System.out.println();
System.out.print("玩家2的牌: ");
for(String s:wanjia2)
System.out.print(s+" ");
System.out.println();
System.out.print("玩家3的牌: ");
for(String s:wanjia3)
System.out.print(s+" ");
System.out.println();
System.out.print("底牌: ");
for(String s:dipai)
System.out.print(s+" ");
}
3.斗地主升级版
通过程序实现斗地主过程中的洗牌、发牌和看牌,要求:对牌进行排序。
public static void main(String[] args) {
//创建HashMap,键是编号,值是牌
HashMap<Integer,String> hashMap = new HashMap<Integer,String>();
//创建ArrayList,存储编号
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//创建花色数组和点数数组
String[] colors={"♥","♠","♣","◆"};
String[] numbers= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号,1-54
int index=0;
for(String number:numbers)
{
for(String color:colors) {
String pai=color+number;
hashMap.put(index, pai);
arrayList.add(index);
index++;
}
}
hashMap.put(index, "小王");
arrayList.add(index);
index++;
hashMap.put(index, "大王");
arrayList.add(index);
//洗牌(洗的是编号)
Collections.shuffle(arrayList);
//发牌(发的也是编号,为保证编号是排序的可用TreeSet接收)
TreeSet<Integer> treeSet1 = new TreeSet<Integer>();
TreeSet<Integer> treeSet2 = new TreeSet<Integer>();
TreeSet<Integer> treeSet3 = new TreeSet<Integer>();
TreeSet<Integer> dipai= new TreeSet<Integer>();
for(Integer i=0;i<arrayList.size();i++) {
Integer paihao=arrayList.get(i);
if(i>=arrayList.size()-3)
dipai.add(paihao);
else if(i%3==1) {
treeSet1.add(paihao);
}
else if(i%3==2) {
treeSet2.add(paihao);
}
else
treeSet3.add(paihao);
}
//定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合里面找对应的牌)//调用看牌方法
System.out.print("玩家1的牌:");
for(Integer i:treeSet1) {
String s=hashMap.get(i);
System.out.print(s+" ");
}
System.out.println();
System.out.print("玩家2的牌:");
for(Integer i:treeSet2) {
String s=hashMap.get(i);
System.out.print(s+" ");
}
System.out.println();
System.out.print("玩家3的牌:");
for(Integer i:treeSet3) {
String s=hashMap.get(i);
System.out.print(s+" ");
}
System.out.println();
System.out.print("底牌:");
for(Integer i:dipai) {
String s=hashMap.get(i);
System.out.print(s+" ");
}
}