Java 字典


    字典 Map  存鍵值對

    /       \

HashMap <K,V>   LinkedHashMap<K,V>

數組+鏈表        數組+雙鏈表(有序)

自定義鍵對象(不能重)需要重寫鍵的hashCode()方法、equals()方法。

Map

import java.util.Map;

import java.util.Set;

public class Demo01 {

public static void main(String[] args) {

Map<String,String> map=new HashMap<String,String>();

map.put("a","12"); //添加

map.put("b","1");

map.put("a","2");//覆蓋a的值

System.out.println(map);//{a=2,b=1} 無順序

 

//String v=map.remove("b");//刪除鍵的值 返回

//System.out.println(v);

System.out.println(map.get("a"));//取值  沒有返回null

// 通過keyset遍歷map 增強for

// Map不能直接用 迭代器/增強for 遍歷 需要轉Set才能用

Set<String> keys=map.keySet();   // 返回集合中所有鍵

for(String key:keys){

String value=map.get(key);   // 獲取鍵的值

System.out.println(key+"..."+value);

}

//通過Iterater

Set<String> keys2=map.keySet();

Iterator<String> it=keys2.iterator();

while(it.hasNext()){

String key=it.next();

String value=map.get(key);

System.out.println(key+"..."+value));

}

//增強for + entrySet方法(鍵值對對象)

Set<Map.Entry<String,String>> entrys=map.entrySet();

for(Map.Entry<String,String> entry:entrys){

String key=entry.getKey();

String value=entry.getValue();

System.out.println(key+"..."+value);

}

//Iterater遍歷

Set<Map.Entry<String,String>> entrys2=map.entrySet();

Iterator<Map.Entry<String,String>> it2=entrys.iterator();

while(it2.hasNext()){

Map.Entry<String,String> entry2=it2.next();

String key2=entry2.getKey();

String value2=entry2.getValue();

System.out.println(key2+"..."+value2);

}

}

}

Map<Student,String> map = new HashMap<Student,String>();//鍵內容不重

map.put(new Student("lisi",28), "上海");// Student重寫HashCode()equals()

多層字典

HashMap<String,HashMap<String,Person>> oracle

  =new HashMap<String,HashMap<String,Person>>();

 

HashMap<String,Person> java0601=new HashMap<String,Person>();

java0601.put("001", new Person("小紅帽",18));

java0601.put("002", new Person("小丸子",20));

HashMap<String,Person> java0929=new HashMap<String,Person>();

java0929.put("001", new Person("張超",22));

java0929.put("002", new Person("趙玉仙",21));

 

oracle.put("java0601", java0601);

oracle.put("java0929", java0929);

 

//遍歷  增強for+keyset

Set<String> classes=oracle.keySet();//所有鍵 集合   班級名字集合

for(String clas:classes){

HashMap<String,Person> c=oracle.get(clas);//獲取班級集合 值

Set<String> stunumbers=c.keySet();  // 人名集合 鍵

for(String num:stunumbers){

Person p=c.get(num); //人名集合 值

System.out.println("班級"+clas+"學號"+num+"學生"+p);

}

}

 

 

斗地主 發牌 例子

 

public static void main(String[] args) {
    //准備容器                                    //牌序  牌值
    HashMap<Integer,String> pookerMap=new HashMap<Integer,String>();
    ArrayList<Integer> pookerNumer=new ArrayList<Integer>();   //牌序
    //准備牌
    String[] number={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
    String[] color={"♥","♦","♣","♠"};
    int index=2;
    for(String num:number){
        for(String col:color){
            pookerMap.put(index, col+num);//向Map中添加  牌序:牌值
            pookerNumer.add(index);   //向ArrayList添加  牌序號
            index++;
        }
    }
    //添加大小王
    pookerMap.put(0,"大王");    pookerNumer.add(0);
    pookerMap.put(1,"小王");    pookerNumer.add(1);
    System.out.println(pookerMap);
    //洗牌、發牌
    Collections.shuffle(pookerNumer);  //打亂  ArrayList 牌序號
    ArrayList<Integer> player1=new ArrayList<Integer>();
    ArrayList<Integer> player2=new ArrayList<Integer>();
    ArrayList<Integer> player3=new ArrayList<Integer>();
    ArrayList<Integer> bottom=new ArrayList<Integer>();
    
    for(int i=0;i<pookerNumer.size();i++){  //分發  牌序號
        if(i<3){bottom.add(pookerNumer.get(i));} // 前三個序號 添加 底牌
        else if(i%3==0){player1.add(pookerNumer.get(i));}
        else if(i%3==1){ player2.add(pookerNumer.get(i));}
      else if(i%3==2){ player3.add(pookerNumer.get(i)); }
    }    
    //對三個玩家的牌 排序
    Collections.sort(player1);    Collections.sort(player2);
    Collections.sort(player3);    Collections.sort(bottom);    
    //看牌
    lookPooker("玩家1",player1,pookerMap);// 名稱  牌序號  字典
    lookPooker("玩家2",player2,pookerMap);
    lookPooker("玩家3",player3,pookerMap);
    lookPooker("底牌",bottom,pookerMap);
}

public static void lookPooker(String name,ArrayList<Integer> player,HashMap<Integer,String> pookerMap){
    System.out.println(name+": ");
    for(int index:player){
        System.out.print(pookerMap.get(index)+" ");// 對應字典 找出 牌序號的 值
    }
    System.out.println();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM