Collections 笔记

Collections

Collections概述和使用

是针对集合操作的工具类
image.png

//创建集合对象
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);

升序
image.png
反转
image.png
随机排序
image.png

案例 ArrayList集合存储学生对象并排序

image.png
学生
image.png
创建集合对象 把学生添加到集合
image.png

//使用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());
}

输出
image.png

案例 模拟斗地主

image.png

//创建一个牌盒,也就是定义一个集合对象,用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();
}

结果输出
image.png

案例 模拟斗地主升级版

对拿到的牌进行排序
image.png

//创建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();
}

结果输出
image.png

你可能感兴趣的:(java)