Java學習之隨堂筆記系列——day16

1 可變參數
    概念:方法參數列表中的參數個數不確定,就表示可變參數。
    可變參數的本質:數組。
    注意事項:方法的參數列表中只能有一個可變參數,並且可變參數只能在參數列表的末尾。
    語法格式:(數據類型...變量名)   

 public class ParameterDemo {
        public static void main(String[] args) {
            add(10,20,30,40); //允許

            int[] arr={10,20,30,40};
            add(arr);//允許

            Integer[] arr2={10,20,30,40};
            //add(arr2); //報錯,int[]和Integer[]不能相互轉換
        }
        public static int add(int... nums){
            int sum=0;
            for (int num : nums) {
                sum+=num;
            }
            return sum;
        }
    }


    可變參數的使用;
        /*
            集合和數組之間的相互轉換
                數組--->集合 Arrays
                    static <T> List<T>    asList​(T... a)    :返回由指定數組支持的固定大小的列表。
                集合--->數組 Collection
                    Object[]    toArray​()    :返回一個包含此集合中所有元素的數組。
                    <T> T[]    toArray​(T[] a)    :返回一個包含此集合中所有元素的數組; 返回的數組的運行時類型是指定數組的運行時類型。
         */
       

 public class ArgsDemo2 {
            public static void main(String[] args) {
                //數組--->集合
                Integer[] arr={10,20,30,40,50};
                List<Integer> list = Arrays.asList(arr);
                System.out.println(list);

                //集合--->數組
                List<String> lts=List.of("hello","world","java");
                //方式1:Object[]     toArray​()    :返回一個包含此集合中所有元素的數組
                Object[] arrs1 = lts.toArray();
                System.out.println(Arrays.toString(arrs1));

                //方式2: <T> T[]    toArray​(T[] a) :需要傳遞一個數組對象,集合中數據是什麼類型就創建一個該類型的空數組傳進去
                /*String[] arrs2=new String[lts.size()];
                lts.toArray(arrs2);*/
                //簡化寫法
                String[] arrs2 = lts.toArray(new String[lts.size()]);
                System.out.println(Arrays.toString(arrs2));
            }
        }


2 Map集合
    map集合是一個雙列集合,每次存儲一對值,分爲key-value。
    特點:key相同,value會被替換。也就是說key是唯一的。

    map集合的使用,常用方法:(重點)
        增/添加/改
            V put​(K key, V value):添加獲取替換值,如果添加的key不存在,那麼返回值就是null。如果key存在,那麼新的value會替換原來的value值,返回值是被替換的值。
        刪/移除
            V remove(K key):根據key移除一對元素。返回值就是對應的value值
        查/獲取
            V get(K key):根據key獲取value。
            K keySet():獲取所有的key
            Map.Entry<K,V> entrySet():獲取所有的鍵值對對象
        遍歷:(重要*****)
            方式1:鍵找值的方式,實現思路:
                1 獲取所有的key
                2 遍歷所有的key
                3 在遍歷過程中根據key獲取對應的value值,打印結果
            方式2:鍵值對的方式,實現思路:
                Map.Entry<K,V> : Entry是Map的一個內部接口(看成是內部類結構)。Entry也有泛型,泛型和Map集合的泛型一樣。
                Entry的作用:在我們調用Map集合的put方法存值的時候,其實內部會創建一個Entry實現類對象,將我們存進去的值封裝到Entry實現類對象中。
                            簡單說:Map集合的內部會將每一對值封裝成一個個Entry對象,Entry對象也叫做鍵值對對象。

                1 獲取所有的鍵值對對象:Map.Entry<K,V> entrySet();
                2 遍歷所有的鍵值對對象,獲取每一個鍵值對對象
                3 調用鍵值對對象的getKey()和getValue()方法獲取鍵和值,打印結果。
    Map集合key唯一的條件:
        key表示的對象要重寫hashCode()和equals()方法。

3 Collections集合工具類
  1 Collection和Collections的區別?
    Collection是單列集合的頂層接口,Collections是操作集合的工具類。
  2 Collections的常用方法:
    static void    shuffle​(List<?> list):隨機打亂集合中元素的順序。
    static <T extends Comparable<? super T>> void sort​(List<T> list):
            對list集合中的元素進行自然排序,list集合中的元素必須要實現Comparable接口
    static <T> void    sort​(List<T> list, Comparator<? super T> c):對list集合中的元素使用Comparator比較器進行排序

4 鬥地主案例
    基礎版思路分析
        1、準備牌:
            1、定義一個List集合作爲牌盒
            2、定義兩個數組,存儲花色和牌號
            3、遍歷數組,將花色和牌號進行組合,將組合好的牌存的牌盒list集合中
        2、洗牌:
            Collections.shuffle(牌盒集合)
        3、發牌
            1、定義三個List集合表示三個玩家和一個集合表示底牌
            2、遍歷牌盒的list集合,共有54張牌在list集合中
            3、如果索引大於50,那麼就發給底牌集合
            4、將索引對3取餘,如果餘數是0,那麼就發給玩家1;如果餘數是1,就發給玩家2;如果餘數是2,就發給玩家3
            if(i>50){
               //發給底牌
            }else if(i%3==0){
              //發給玩家1
            }else if(I%3==1){
              //發給玩家2
            } else if(I%3==2){
              //發給玩家3
            }
        4、看牌:打印玩家姓名和玩家集合對象
    加強版思路分析:
        1、準備牌
            1、定一個Map集合最爲牌盒
            2、定義兩個數組,存儲花色和牌號
            3、定義一個牌的序號起始值爲0,每存一張牌,序號就++;
            4、遍歷數組,將花色和牌號進行組合,將組合好的牌存的牌盒map集合中
        2、洗牌
            1.獲取Map集合的所有key
               Set<Integer> keys=poker.keySet();
            2.將set集合轉換成list,使用list的構造方法即可
            3.打亂順序
               Collections.shuffle(list)
        3、發牌
            1、定義三個TreeSet集合表示三個玩家和一個集合表示底牌
            2、遍歷裝有序號的list集合,共有54個序號在list集合中
            3、如果索引大於50,那麼就發給底牌集合
            4、將索引對3取餘,如果餘數是0,那麼就發給玩家1;如果餘數是1,就發給玩家2;如果餘數是2,就發給玩家3
            if(i>50){
               //發給底牌
            }else if(i%3==0){
              //發給玩家1
            }else if(I%3==1){
              //發給玩家2
            } else if(I%3==2){
              //發給玩家3
            }
        4、看牌
            定義一個方法:遍歷玩家的TreeSet集合,根據序號從Map集合中獲取對應的牌,打印到控制檯
作業1:查API文檔實現數組和集合之間的相互轉換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章