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> array){ 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();}
后果输入