Collections类的概述
是针对集合操作的工具类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 class CollectionsDemo01 { public static void main(String[] args) { //创建集合对象 List<Integer> list = new ArrayList<Integer>(); //添加元素 list.add(30); list.add(90); list.add(10); list.add(60); list.add(20); //public static <T extends Comparable<? super T>> void sort(List<T> list):将指定的列表按照升序排序 // Collections.sort(list);//[10, 20, 30, 60, 90] //- public static void reverse(List<?> list):反转指定列表中元素的顺序 // Collections.reverse(list);//[20, 60, 10, 90, 30] Collections.shuffle(list);//每次都是随机的排序 System.out.println(list); } }需求:ArrayList存储学生对象,使用Collections对ArrayList进行排序
要求:按照年龄从小到大排序,年龄相同时,按照名字的字母顺序排序
思路:
定义学生类创建ArrayList集合对象创建学生对象把学生添加到集合使用Collections对ArrayList集合排序遍历集合 public class CollectionsDemo02 { public static void main(String[] args) { //创建ArrayList集合对象 ArrayList<Student> array = new ArrayList<Student>(); //创建学生对象 Student s1 = new Student("csl", 11); Student s2 = new Student("zsg", 44); Student s3 = new Student("hagl", 36); Student s4 = new Student("asl", 11); //将学生对象添加到集合 array.add(s1); array.add(s2); array.add(s3); array.add(s4); //使用Collections对ArrayList集合排序 Collections.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 me : array){ String name = me.getName(); int age = me.getAge(); System.out.println(name+","+age); } } } ------------------- asl,11 csl,11 hagl,36 zsg,44需求:通过程序实现斗地主过程中的洗牌,发牌和看牌
思路:
创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现往牌盒里装牌洗牌,也就是把牌打乱,用Collections的shuffle()方法实现发牌,也就是遍历集合,给三个玩家发牌看牌,也就是三个玩家分别遍历自己的牌 /* 1. 创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 2. 往牌盒里装牌 3. 洗牌,也就是把牌打乱,用Collections的shuffle()方法实现 4. 发牌,也就是遍历集合,给三个玩家发牌 5. 看牌,也就是三个玩家分别遍历自己的牌 */ public class PokerDemo { public static void main(String[] args) { //创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现 ArrayList<String> array = new ArrayList<String>(); //往牌盒里装牌 /* ♠2,♠3,♠4,♠5,♠6,♠7,♠8,♠9,♠10,♠J,♠Q,♠K ♥2... ♣2... ♦2... 小王,大王 */ //定义个花色数组 String[] colors = {"♠","♥","♣","♦"}; //定义点数数组 String[] numbers ={"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //通过双层for嵌套向牌盒中添加牌 for (String color:colors){ for (String number : numbers){ //做个拼接 array.add(color+number); } } array.add("小王"); array.add("大王"); // System.out.println(array); //3. 洗牌,也就是把牌打乱,用Collections的shuffle()方法实现 Collections.shuffle(array); // System.out.println(array); //4. 发牌,也就是遍历集合,给三个玩家发牌 ArrayList<String> csArray = new ArrayList<String>(); ArrayList<String> mjArray = new ArrayList<String>(); ArrayList<String> ssArray = 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){//通过对3取余来给玩家发牌 csArray.add(poker); }else if (i%3==1){ mjArray.add(poker); }else if (i%3==2){ ssArray.add(poker); } } //5. 看牌,也就是三个玩家分别遍历自己的牌 lookPoker("马俊",mjArray); lookPoker("余震森",ssArray); lookPoker("陈大帅",csArray); lookPoker("底牌",dpArray); } //看牌的方法 public static void lookPoker(String name ,ArrayList<String> array){ System.out.println(name+"的牌是:"); for (String poker : array){ System.out.print(poker+" "); } System.out.println(); } } ---------------------- 马俊的牌是: ♣6 ♠9 ♦4 ♥J ♣A ♦8 ♥7 ♠2 ♠5 ♣4 ♠3 ♥8 ♣7 ♥4 ♠Q ♠6 ♦Q 余震森的牌是: ♦2 ♣Q ♠7 ♣5 ♣8 大王 ♦K ♥9 ♥A ♦5 ♠J ♦3 ♠10 ♥2 ♥K ♣3 ♦J 陈大帅的牌是: ♠8 小王 ♥6 ♠4 ♦6 ♥Q ♣J ♠A ♣10 ♦A ♣9 ♣2 ♦7 ♥3 ♥10 ♦9 ♥5 底牌的牌是: ♠K ♣K ♦10需求:通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌进行排序
思路:
创建HashMap,键是编号,值是牌创建ArrayList,存储编号创建花色数组和点数数组从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里存储编号洗牌(洗的是编号),用Collections的shuffle()方法实现发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的值)调用看牌方法 /* 需求:通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌进行排序 思路: 1. 创建HashMap,键是编号,值是牌 2. 创建ArrayList,存储编号 3. 创建花色数组和点数数组 4. 从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里存储编号 5. 洗牌(洗的是编号),用Collections的shuffle()方法实现 6. 发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收) 7. 定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的值) 8. 调用看牌方法 */ public class PokerDemo02 { public static void main(String[] args) { // 创建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是number就是按照数字顺序优先 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()方法实现 Collections.shuffle(array); // 发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收) TreeSet<Integer> csPoker = new TreeSet<Integer>(); TreeSet<Integer> smPoker = new TreeSet<Integer>(); TreeSet<Integer> ddPoker = new TreeSet<Integer>(); TreeSet<Integer> dpPoker = new TreeSet<Integer>(); for (int i=0;i<array.size();i++){ Integer it = array.get(i); if (i>=array.size()-3){ dpPoker.add(it); } else if (i%3==0){ csPoker.add(it); } else if (i%3==1){ smPoker.add(it); } else if (i%3==2){ ddPoker.add(it); } } //调用看牌方法 lookPoker("陈大帅",csPoker,hm); lookPoker("滴滴",ddPoker,hm); lookPoker("婷姐",smPoker,hm); lookPoker("底牌",dpPoker,hm); } // 定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的值) public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm) { System.out.println(name+"的牌是:"); for (Integer key : ts){ String poker = hm.get(key); System.out.print(poker+" "); } System.out.println(); } } -------------- 陈大帅的牌是: ♣4 ♦4 ♥5 ♣5 ♦5 ♥6 ♦7 ♠8 ♠9 ♥9 ♠10 ♦10 ♥J ♠A ♥A ♦2 大王 滴滴的牌是: ♠3 ♣3 ♦3 ♥4 ♠7 ♣7 ♣8 ♦8 ♣9 ♥10 ♠J ♣J ♦J ♠K ♥K ♦K ♣A 婷姐的牌是: ♥3 ♠5 ♠6 ♣6 ♦6 ♥8 ♦9 ♣10 ♠Q ♥Q ♣Q ♦Q ♣K ♦A ♥2 ♣2 小王 底牌的牌是: ♠4 ♥7 ♠2