2015年8月5日 星期三

Java上課練習:集合_Map

集合預設使用 Object 型別,所以 key 與 value 可以是任意型別的物件



程式碼
import java.util.HashMap;
import java.util.Map;

//集合預設使用 Object 型別,所以 key 與 value 可以是任意型別的物件
public class MapDemo {

    public static void main(String[] args) {
        Map map = new HashMap(); //HashMap基於雜湊表的 Map 介面的實作,並允許使用 null 值和 null 鍵
        
        //將成對的Key、valus放入集合,每個鍵最多只能映射到一個值
        map.put(100, "中正區");
        map.put(103, "大同區");
        
        Object obj=map.get(103); //給Key取出valus
        System.out.println(obj);
        
        String s=(String)obj;//將Object轉換為String
        System.out.println("字串長度:"+s.length());//讀取字串長度
    }

}

可以使用泛型,就不需要轉換類別
import java.util.HashMap;
import java.util.Map;


public class MapDemo2 {

    public static void main(String[] args) {
        //< > 泛型,限定 Key 為Integer,valus為 String
        Map<Integer,String> map = new HashMap<>();
        
        //將成對的Key、valus放入集合
        map.put(100, "中正區");
        map.put(103, "大同區");
        
        /*
        因為當初使用泛型,指定valus為String
        所以現在不用Object宣告變數,直接使用String
        如果不使用泛型的集合,需要進行轉型,請參照MapDemo
        */
        String value=map.get(103);
        System.out.println(value);
        //valus是String,不用轉型
        System.out.println("字串長度:"+value.length());

    }

}

運用之前作過的樂透進行配對
Lotto
import java.util.ArrayList;


public class Lotto {
    
    private static ArrayList 數字陣列;
    private static ArrayList 樂透;
    private static int 索引;
    private static int 抽出號碼;
    
    public static ArrayList 產生一組樂透號碼(){
        建立數字與樂透陣列();
        42個號碼放進數字陣列();
        for (int j=1;j<=6;j++){
            用亂數產生一個陣列索引();
            根據索引從陣列取出號碼();
            將抽出的號碼放進樂透陣列();
        }return 樂透;
    }
    
    
    private static void 建立數字與樂透陣列(){
          數字陣列=new ArrayList();
          樂透=new ArrayList();
    }
    
    private static void 42個號碼放進數字陣列(){
        for (int i=1;i<=42;i++){
            數字陣列.add(i);
        }
    }
    
    private static void 用亂數產生一個陣列索引(){
        索引=(int)(Math.random()*數字陣列.size());
    }
    
    private static void 根據索引從陣列取出號碼(){
        Object obj=數字陣列.remove(索引);
        抽出號碼=(int)obj;
    }
    
    private static void 將抽出的號碼放進樂透陣列(){
        樂透.add(抽出號碼);
    }
    
}

使用Map
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;

public class MapDemo3 {

    public static void main(String[] args) {
        ArrayList a = Lotto.產生一組樂透號碼();
        ArrayList b = Lotto.產生一組樂透號碼();
        System.out.println("a=" + a);
        System.out.println("b=" + b);

        //泛型,指定Key為String,value為ArrayList
        Map<String, ArrayList> map = new HashMap<>();
        //成對的Key,valus放入
        map.put("張無忌", a);
        map.put("周芷若", b);
        /*
         因為當初使用泛型,指定valus為String
         所以現在不用Object宣告變數,直接使用String
         */
        String name = JOptionPane.showInputDialog("請輸入名字:");
        ArrayList value = map.get(name); //將Key帶入取value
        JOptionPane.showMessageDialog(null, value);
    }

}



沒有留言:

張貼留言