1. 程式人生 > >Java集合框架18:Collections工具類

Java集合框架18:Collections工具類

Collections中常見方法

1、public static void sort(List list)。
2、 public static int binarySearch(List<?> list,T key)。
3、 public static void max(Collection<?> coll)。
4、public static void reverse(List<?> list)。
5、 public static void shuffle(List<?> list)。

案例演示
package map;
import java.util.ArrayList;
import java.util.Collections;
public class Dmeo_Collections {
     public static void main(String[] args) {
          //demo();
          
                   ArrayList<String> list = new ArrayList<>();
                   list.add("a");
                   list.add("b");
                   list.add("c");
                   list.add("g");
                   list.add("a");
                   
                   //System.out.println(Collections.max(list));
//                 System.out.println(list);
//                 Collections.reverse(list);//反轉
//                 System.out.println(list);
                   
                   Collections.shuffle(list);//隨意置換,可以用來洗牌
                   System.out.println(list);
     }
     public static void demo() {
          ArrayList<String> list = new ArrayList<>();
          list.add("c");
          list.add("b");
          list.add("d");
          list.add("a");
          list.add("c");
          
          System.out.println(list);
          Collections.sort(list);
          System.out.println(list);
     }
     
     public static void demo2() {
          //使用二分搜尋法搜尋指定列表,以獲得指定物件。在進行此呼叫之前,必須根據指定的比較器對列表進行升序排序(通過 sort(List, Comparator) 方法)。
                   //如果沒有對列表進行排序,則結果是不確定的。如果列表包含多個等於指定物件的元素,則無法保證找到的是哪一個。
                   ArrayList<String> list = new ArrayList<>();
                   list.add("a");
                   list.add("b");
                   list.add("c");
                   list.add("g");
                   list.add("a");
                   //如果搜尋鍵包含在列表中,則返回搜尋鍵的索引;否則返回 (-(插入點) - 1)。
                   //插入點 被定義為將鍵插入列表的那一點:即第一個大於此鍵的元素索引;如果列表中的所有元素都小於指定的鍵,則為 list.size()。
                   //注意,這保證了當且僅當此鍵被找到時,返回的值將 >= 0。
                   System.out.println(Collections.binarySearch(list,"a"));
                   System.out.println(Collections.binarySearch(list, "z"));
     }
}

package project;
import java.util.ArrayList;
import java.util.Collections;
public class Test2 {
     /**
      * 分析
      * 1,買一副撲克,其實就是自己建立一個集合物件,將撲克牌儲存進去
      * 2,洗牌
      * 3,發牌
      * 4,看牌
      */
     
     public static void main(String[] args){
          //1,買一副撲克,其實就是自己建立一個集合物件,將撲克牌儲存進去
          String[] num = {"A","1","2","3","4","5","6","7","8","9","10","J","Q","K"};
          String[] color = {"紅桃","黑桃","方片","梅花"};
          ArrayList<String> poker = new ArrayList<>();
          
          //拼接花色和數字
          for(String s1 : color) {
              for(String s2 : num){
                   poker.add(s1.concat(s2));     //concat連線兩個字串
              }
          }
          
          System.out.println(poker);
          
          poker.add("小王");
          poker.add("大王");
          //2,洗牌
          Collections.shuffle(poker);
          //3,發牌
          ArrayList<String> gaojin = new ArrayList<>();
          ArrayList<String> longwu = new ArrayList<>();
          ArrayList<String> me = new ArrayList<>();
          ArrayList<String> dipai = new ArrayList<>();
          
          for(int i = 0; i < poker.size(); i ++) {
              
              if(i >= poker.size() - 3) {
                   dipai.add(poker.get(i));
              } else if (i % 3 == 0) {
                   gaojin.add(poker.get(i));
              } else if (i % 3 == 1) {
                   longwu.add(poker.get(i));
              } else {
                   me.add(poker.get(i));
              }
          }
          
          //4,看牌
          System.out.println(gaojin);
          System.out.println(longwu);
          System.out.println(me);
        
     }
}

package project;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class Test3 {
     /**
      * A:案例演示
      * 模擬鬥地主洗牌和發牌並對鍵進行排序的程式碼實現
      *
      * 分析:
      * 1,買一副撲克,其實就是自己建立一個集合物件,將撲克牌儲存進去
      * 2,洗牌
      * 3,發牌
      * 4,看牌
      *
      */
     
     public static void main(String[] args) {
          //1,買一副撲克,其實就是自己建立一個集合物件,將撲克牌儲存進去
          String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
          String[] color = {"紅桃","黑桃","方片","梅花"};
          HashMap<Integer,String> hm = new HashMap<>(); //儲存索引和撲克牌
          ArrayList<Integer> list = new ArrayList<>();  //儲存索引
          int index = 0;
          
          //拼接撲克牌並索引和撲克牌儲存在hm中
          for(String s1 : num) {  //獲取數字
              for(String s2 : color){ //獲取顏色
                   hm.put(index,s2.concat(s1));
                   list.add(index);
                   index ++;
              }
          }
          //將大小王新增到雙列集合中
          hm.put(index,"小王");
          list.add(index);   //將52索引新增到集合中
          index ++;
          hm.put(index, "大王"); //將52索引新增到集合中
          list.add(index);
          System.out.println(hm);
          System.out.println(list);
          
          //2,洗牌
          Collections.shuffle(list);
          System.out.println(list);
          //3,發牌
          TreeSet<Integer> gaojin = new TreeSet<>();
          TreeSet<Integer> longwu = new TreeSet<>();
          TreeSet<Integer> me = new TreeSet<>();
          TreeSet<Integer> dipai = new TreeSet<>();
          
          for(int i = 0; i < list.size(); i ++) {
              if(i >= list.size() - 3) {
                   dipai.add(list.get(i)); //將三張底牌儲存在底牌集合中
              } else if(i % 3 == 0) {
                   gaojin.add(list.get(i));
              } else if(i % 3 == 1) {
                   longwu.add(list.get(i));
              } else {
                   me.add(list.get(i));
              }
          }
          
          //看牌
          lookPoker(hm,gaojin,"高進");
          lookPoker(hm,longwu,"龍武");
          lookPoker(hm,me,"肖士成");
          lookPoker(hm,dipai,"底牌");
     }
     /*
      * 看牌
      * 1,返回值型別void
      * 2,引數列表HashMap,TreeSet,String name
      *
      */
     public static void lookPoker(HashMap<Integer,String> hm,TreeSet<Integer>ts,String name) {
          System.out.println(name + "的牌是:");
          for(Integer i : ts) {//i代表雙列集合中的每一個鍵
              System.out.print(hm.get(i) + " ");
          }
          System.out.println();
     }
     
}