• 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();
    }
  • 相关阅读:
    AC自动机模板
    KMP 模板
    HDU 2746 Cyclic Nacklace
    LCS模板
    POJ 1159 Palindrome
    LIS n^2&nlogn模板
    Codeforces Round #Pi (Div. 2) C. Geometric Progression
    Codeforces Beta Round #25 (Div. 2 Only)E. Test
    Codeforces Beta Round #25 (Div. 2 Only)D. Roads not only in Berland
    bzoj5055 膜法师
  • 原文地址:https://www.cnblogs.com/javscr/p/10230464.html
Copyright © 2020-2023  润新知