集合【Map、可變參數、Collections】,mapcollections

來源:互聯網
上載者:User

集合【Map、可變參數、Collections】,mapcollections

Map集合的特點
java.util.Map<K,V>介面:集合,是一個雙列集合
Map集合的特點:
1.是一個雙列集合,賦值的時候必須同時給key和value賦值
2.是一個無序的集合(存入和取出元素的順序可能不一致)
3.key值不能重複,value可以重複
4.一個key只能對應一個vlaue
5.定義集合時,資料類型key和value可以使用相同的資料類型,也可以使用不同的資料類型

Map集合遍曆的第一種方式
Map集合遍曆的第一種方式:通過健尋找值的方式
Map集合中有一個方法:keySet
Set<K> keySet() 返回此映射中包含的鍵的 Set 視圖。 把Map集合中的健儲存到一個Set集合中
遍曆Map集合的步驟:
1.定義一個Map集合,往集合中添加元素
2.調用Map集合中的方法keySet,把Map集合中的健儲存到一個Set集合中
3.遍曆Set集合,擷取Map集合所有的健
4.通過擷取到的健,使用Map集合的方法get尋找值

 1 public static void main(String[] args) { 2         //1.定義一個Map集合,往集合中添加元素 3         Map<String,String> map = new HashMap<String,String>(); 4         map.put("a", "1"); 5         map.put("b", "2"); 6         map.put("c", "3"); 7         map.put("d", "4"); 8         //2.調用Map集合中的方法keySet,把Map集合中的健儲存到一個Set集合中 9         Set<String> set = map.keySet();10         //System.out.println(set.getClass());11         //3.遍曆Set集合,擷取Map集合所有的健12         //使用迭代器遍曆13         Iterator<String> it = set.iterator();14         while(it.hasNext()){15             String key = it.next();16             //4.通過擷取到的健,使用Map集合的方法get尋找值17             String value = map.get(key);18             System.out.println(key+"..."+value);19         }20         System.out.println("----------------");21         //使用增強for遍曆22         for(String key : set){23             //4.通過擷取到的健,使用Map集合的方法get尋找值24             String value = map.get(key);25             System.out.println(key+"..."+value);26         }27         System.out.println("----------------");28         //使用增強for遍曆29         for(String key : map.keySet()){30             //4.通過擷取到的健,使用Map集合的方法get尋找值31             String value = map.get(key);32             System.out.println(key+"..."+value);33         }34     }

Map集合遍曆的第二種方式
Map集合遍曆的第二種方式:遍曆索引值對的方式
Map集合中有一個方法:entrySet
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射關係的 Set 視圖。
遍曆步驟:
1.定義一個Map集合,往集合中添加元素
2.調用Map集合中的方法entrySet,把Map集合中的每一個映射關係(結婚證)放入到Set集合中
3.遍曆Set集合,擷取每一個映射關係Entry<K,V>
4.使用Entry<K,V>中的方法getKey和getValue擷取健和值

 1 public static void main(String[] args) { 2         //1.定義一個Map集合,往集合中添加元素 3         Map<String,String> map = new HashMap<String,String>(); 4         map.put("a", "1"); 5         map.put("b", "2"); 6         map.put("c", "3"); 7         map.put("d", "4"); 8         /* 9          * 2.調用Map集合中的方法entrySet,把Map集合中的每一個映射關係(結婚證)放入到Set集合中10          * 成員內部類的訪問方式:外部類.內部類(Map.Entry)11          */12         Set<Map.Entry<String, String>> set = map.entrySet();13         //3.遍曆Set集合,擷取每一個映射關係Entry<K,V>14         //使用迭代器遍曆Set集合15         Iterator<Map.Entry<String, String>> it = set.iterator();16         while(it.hasNext()){17             Map.Entry<String, String> entry = it.next();18             //4.使用Entry<K,V>中的方法getKey和getValue擷取健和值19             String key = entry.getKey();20             String value = entry.getValue();21             System.out.println(key+"..."+value);22         }23         System.out.println("---------------------");24         //使用增強for遍曆Set集合25         for(Map.Entry<String, String> entry:set){26             //4.使用Entry<K,V>中的方法getKey和getValue擷取健和值27             String key = entry.getKey();28             String value = entry.getValue();29             System.out.println(key+"..."+value);30         }31         System.out.println("---------------------");32         //使用增強for遍曆Set集合33         for(Map.Entry<String, String> entry:map.entrySet()){34             //4.使用Entry<K,V>中的方法getKey和getValue擷取健和值35             String key = entry.getKey();36             String value = entry.getValue();37             System.out.println(key+"..."+value);38         }39     }

HashMap儲存自訂類型索引值
HashMap儲存自訂類型索引值
自訂類型作為Map集合的值
自訂類型作為Map集合的健

記住:自訂類型什麼時候重寫hashCode和equals
1.使用HashSet儲存自訂類型
2.使用HashMap集合,健使用自訂類型

Hashtable
Map 的實作類別 Hashtable
底層資料結構是雜湊表,特點和 hashMap 是一樣的
Hashtable 是安全執行緒的集合,運行速度慢
HashMap 是線程不安全的集合,運行速度快

Hashtable 命運和 Vector 是一樣的,從 JDK1.2 開始,被更先進的 HashMap 取代

HashMap 允許儲存 null 值,null 健
hashtable 不允許儲存 null 值,null 健

Hashtable 他的孩子,子類 Properties 依然活躍在開發舞台

LinkedHashMap集合特點
java.util.LinkedHashMap extends HashMap implements Map
LinkedHashMap集合特點:
1.雜湊表+鏈表:雙向鏈表,可以保證迭代順序
2.key不能重複


Collections
java.util.Collections:操作Collection集合的工具類
工具類裡邊的方法都是靜態方法,通過類名可以直接使用

public static <T> void sort(List<T> list) // 集合元素排序
public static void shuffle(List<?> list) // 集合元素儲存位置打亂

可變參數
JDK1.5之後出現的新特性
使用前提:方法參數的資料類型確定,但是參數的個數不確定

使用格式:
修飾符 傳回值類型 方法名(資料類型...變數名){
}
...代表方法可以接收同種資料類型的多個參數
可變參數的底層可以看成是一個數組

可變參數的注意事項:
1.一個方法的參數,只能使用一個可變參數
2.如果方法的參數有多個,可變參數必須寫在參數列表的末尾

 1 public static int add(int...arr){ 2         System.out.println(arr);//[I@104c575 3         System.out.println(arr.length); 4         int sum = 0; 5         //遍曆可變參數-->遍曆數組 6         for (int i : arr) { 7             sum +=i; 8         } 9         10         return sum;11     }

靜態匯入
JDK1.5新特性,靜態匯入
減少開發的代碼量
標準寫法,匯入包的時候才能使用
import static java.lang.System.out; 最末尾,必須是一個靜態成員

package cn.itcast.demo05;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

  1 /*  2  * 帶排序功能的鬥地主案例:  3  *     1.準備牌  4  *     2.洗牌  5  *     3.發牌  6  *     4.排序  7  *     5.看牌  8  */  9 public class DouDiZhu { 10     public static void main(String[] args) { 11         //1.準備牌 12         //建立儲存序號和拍面值的Map集合 13         HashMap<Integer,String> poker = new HashMap<Integer, String>(); 14         //建立儲存序號的List集合 15         ArrayList<Integer> pokerNumber = new ArrayList<Integer>(); 16         //建立序號的數組 17         String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; 18         //建立花色數組 19         String[] colors = {"?","?","?","?"}; 20         //先把大王和小王儲存到集合中 21         int index = 0; 22         poker.put(index, "大王"); 23         pokerNumber.add(index); 24         index++; 25         poker.put(index, "小王"); 26         pokerNumber.add(index); 27         index++; 28          29         //使用迴圈嵌套遍曆兩個數組,組成52張牌 30         for (String number : numbers) { 31             for (String color : colors) { 32                 //把組合包的牌添加到集合中 33                 poker.put(index, color+number); 34                 pokerNumber.add(index); 35                 index++; 36             } 37         } 38         //System.out.println(poker); 39         //System.out.println(pokerNumber); 40          41         //2.洗牌:洗的是牌的序號 42         //使用Collections中的方法shuffle 43         Collections.shuffle(pokerNumber); 44         //System.out.println(pokerNumber); 45          46         /* 47          * 3.發牌:發的也是牌的序號 48          *     a.定義4個集合儲存3個玩家和1個底牌 49          *     b.遍曆儲存序號的List集合 50          *     c.使用list集合的索引%進行判斷進行發牌 51          *     注意:先判斷底牌 52          */ 53         //a.定義4個集合儲存3個玩家和1個底牌 54         ArrayList<Integer> player01 = new ArrayList<Integer>(); 55         ArrayList<Integer> player02 = new ArrayList<Integer>(); 56         ArrayList<Integer> player03 = new ArrayList<Integer>(); 57         ArrayList<Integer> diPai = new ArrayList<Integer>(); 58          59         //b.遍曆儲存序號的List集合 60         for(int i=0; i<pokerNumber.size(); i++){ 61             //定義變數,接收排的序號 62             int number = pokerNumber.get(i); 63             //c.使用list集合的索引%進行判斷進行發牌 64             if(i>=51){ 65                 //儲存底牌 66                 diPai.add(number); 67             }else if(i%3==0){ 68                 //給玩家1發牌 69                 player01.add(number); 70             }else if(i%3==1){ 71                 //給玩家2發牌 72                 player02.add(number); 73             }else if(i%3==2){ 74                 //給玩家3發牌 75                 player03.add(number); 76             } 77         } 78         /*System.out.println(player01); 79         System.out.println(player02); 80         System.out.println(player03); 81         System.out.println(diPai);*/ 82          83         //4.排序 84         //使用Collections中的方法sort 85         Collections.sort(player01); 86         Collections.sort(player02); 87         Collections.sort(player03); 88         Collections.sort(diPai); 89          90         /*System.out.println(player01); 91         System.out.println(player02); 92         System.out.println(player03); 93         System.out.println(diPai);*/ 94          95         /* 96          * 5.看牌 97          */ 98         //調用看牌方法 99         lookPoker("劉德華",player01, poker);100         lookPoker("周潤發",player02, poker);101         lookPoker("周星馳",player03, poker);102         lookPoker("底牌",diPai, poker);103     }104     105     /*106      * 定義一個看牌的方法107      * 傳回值類型:void108      * 方法名:lookPoker109      * 參數列表:玩家和底牌的集合,儲存排的Map集合110      * 使用查表法看牌:111      *     遍曆List集合,擷取Map集合key,使用key去Map集合中尋找value112      */113     public static void lookPoker(String name,ArrayList<Integer> list,HashMap<Integer,String> map){114         System.out.print(name+":");115         //遍曆List集合,擷取Map集合key116         for (Integer key : list) {117             //使用key去Map集合中尋找value118             String value = map.get(key);119             System.out.print(value+" ");120         }121         System.out.println();//換行122     }123 }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.