zoukankan      html  css  js  c++  java
  • Collection单列集合 Map双列集合

    Map集合:该集合存储键值对,一对一对往里存。而且要保证键的唯一性。
    1、添加
      put(K key, V value)
      putAll(Map<? extends K,? extends V> m)
    2、删除
      clear()
      remove(Object key)
    3、判断
      containsKey(Object key)
      containsValue(Object value)
      isEmpty()
    4、获取
      get(Object key) :获取值
      size()
      values()
      entrySet()
      keySet()

    Map
      !--Hashtable :底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。JDK1.0,效率低。
      !--HashMap :底层是哈希表数据结构,允许使用null键和null值,该集合是不同步的。JDK1.2效率高。
      !--TreeMap :底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。
    和Set很像
    其实,Set底层就是使用了Map集合。

    public class MapDemo {
    
        public static void main(String[] args) {
            
            Map<String,String> map = new HashMap<String,String>();
            
            //添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值,
            //并put方法会返回被覆盖的值。
            System.out.println("put:"+map.put("01", "zhangsan1"));
            System.out.println("put:"+map.put("01", "wangwu"));
            map.put("02", "zhangsan2");
            map.put("03", "zhangsan3");
            
            System.out.println("containKey:"+map.containsKey("022"));
            //System.out.println("removeKey:"+map.remove("02"));
            
            System.out.println("get:"+map.get("02"));
            
            //map.put(null, "haha");
            map.put("04", null);
            System.out.println("get:"+map.get("04"));
            //可以通过ge方法的返回值来判断一个键是否存在。通过null返回来判断
            
            //获取map集合中所有的值
            Collection<String> coll = map.values();
            System.out.println(coll);
            System.out.println(map);
        }
    
    }
    MapDemo

    map集合的两种取出方式:
    1、Set<k> keySet:将map中所有的键存入到Set集合中,因为Set具备迭代器,
      所以可以使用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。

    Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出。

    2、Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中,
      而这个关系的数据类型就是:Map.Entry

    public class MapDemo2quzhi {
    
        public static void main(String[] args) {
            
            Map<String,String> map = new HashMap<String,String>();
            map.put("02", "zhangsan2");
            map.put("03", "zhangsan3");
            map.put("01", "zhangsan1");
            map.put("04", "zhangsan4");
            //将Map集合中的映射关系取出,存入到Set集合中。
            Set<Map.Entry<String, String>> entrySet = map.entrySet();
            
            Iterator<Map.Entry<String, String>> it = entrySet.iterator();
            
            while(it.hasNext())
            {
                Map.Entry<String, String> me = it.next();
                String key = me.getKey();
                String value = me.getValue();
                
                System.out.println(key+":"+value);
            }
            
            /*
            //先获取map集合的所有键的Set集合,keySet();
            Set<String> keySet = map.keySet();
            
            //有了Set集合,就可以获取迭代器
            Iterator<String> it = keySet.iterator();
            
            while(it.hasNext())
            {
                String key = it.next();
                //有了键可以通过map集合的get方法获取其对应的值。
                String value = map.get(key);
                System.out.println("key:"+key+",value:"+value);
            }
            */
        }
    
    }
    /*
    Map.Entry  其实Entry也是一个接口,它是Map接口中的一个内部接口
            有Map才有Entry,所以定义内部类
    interface Map
    {
        public static interface Entry
        {
            public abstract Object getKey();
            public abstract Object getValue();
        }
    }
     
    class HashMap implements Map
    {
        class haha implements Map.Entry
        {
            public Object getKey(){}
            public Object getValue(){}
        }
    }
    */
    MapDemo2quzhi

    mao扩展知识。    一对多关系!

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    
    /*
    mao扩展知识。    一对多关系!
    
    map集合被使用是因为具备映射关系。
    
    "yureban"   Student("01" "zhangsan");
    "yureban"   Student("02" "lisi");
    "jiuyeban"  Student("01" "wangwu");
    "jiuyeban"  Student("02" "zhaoliu");
    
    一个学校有多个教室,每个教室都有一个名称。
     */
    class Student1
    {
        private String id;
        private String name;
        Student1(String id,String name)
        {
            this.id = id;
            this.name = name;
        }
        public String toString()
        {
            return id+"::"+name;
        }
    }
    public class MapDemo3_kuozhan {
        
        public static void demo()
        {
            HashMap<String,List<Student1>> czbk = new HashMap<String,List<Student1>>();
            
            List<Student1> yure = new ArrayList<Student1>();
            List<Student1> jiuye = new ArrayList<Student1>();
            
            yure.add(new Student1("01","zhagnsan"));
            yure.add(new Student1("04","wangwu"));
            yure.add(new Student1("01","zhouqi"));
            yure.add(new Student1("02","zhaoliu"));
            
            czbk.put("yureban", yure);
            czbk.put("jiuyeban", jiuye); 
            
            Iterator<String> it = czbk.keySet().iterator();
            
            while(it.hasNext())
            {
                String roomName = it.next();
                List<Student1> room = czbk.get(roomName);
                
                //System.out.println(roomName);
                getInFos(room);
            }
        }
        public static void getInFos(List<Student1> list)
        {
            Iterator<Student1> it = list.iterator();
            while(it.hasNext())
            {
                Student1 s = it.next();
                System.out.println(s);
            }
        }
    
        public static void main(String[] args) {
            demo();
            //教室
            /*
            HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>();
            
            HashMap<String,String> yure = new HashMap<String,String>();
            
            HashMap<String,String> jiuye = new HashMap<String,String>();
            
            czbk.put("yureban", yure);
            czbk.put("jiuyeban", jiuye);
            
            yure.put("01", "zhangsan");
            yure.put("02", "lisi");
            
            jiuye.put("01", "wangwu");
            jiuye.put("02", "zhaoliu");
            
            //取出学校所有学生,遍历czbk集合,获取所有的教室
            Iterator<String> it = czbk.keySet().iterator();
            
            while(it.hasNext())
            {
                String roomName = it.next();
                HashMap<String,String> room = czbk.get(roomName);
                
                //System.out.println(roomName);
                getStudentOf(room);
            }
            //取出某个班级所有学生
            //getStudentOf(jiuye);
            */
    
        }
        public static void getStudentOf(HashMap<String,String> roomMap)
        {
            Iterator<String> it = roomMap.keySet().iterator();
            
            while(it.hasNext())
            {
                String id = it.next();
                String name = roomMap.get(id);
                System.out.println(id+":"+name);
            }
        }
    
    }
    MapDemo3_kuozhan
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    
    /*
    练习:
    "sdfgzxcvsdfxcdf"获取该字符串中的字母出现的次数。
    
    希望打印结果:a[1]c[2]......
    
    通过结果发现,每一个字母都有对应的次数。
    说明字母和次数之间都有映射关系、
    
    注意了,当发现有映射关系时,可以选择Map集合。
    因为map集合中存放的就是映射关系。
    
    什么时候使用map集合呢?
    当数据之间存在着映射关系时,就要先想到map集合。
    
    思路:
    1、将字符串转换成成字符数组,因为要对每一个字母进行操作。
    2、定义一个map集合,因为打印结果的字母有顺序,所以使用TreeMap集合。
    3、遍历字符数组。
        将每一个字母作为键去查map集合,
        如果返回是null,将该字母和1存入到map集合中。
        如果返回不是null,说明该字母在map集合已经存在并有对应次数。
        那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,
        覆盖调用原来键所对应的值。
    4、将map集合中的数据变成指定的字符串形式返回。 
        
    
     */
    public class MapTest3zimu {
    
        public static void main(String[] args) 
        {    
            String s = charCount("aabfcdabc+d-efa");
            System.out.println(s);
        }
        public static String charCount(String str)
        {
            char[] chs = str.toCharArray();
            TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
            int count = 0;
            for(int x=0;x<chs.length;x++)
            {
                if(!(chs[x]>='a'&&chs[x]<='z'||chs[x]>='A' && chs[x]<='Z'))
                    continue;
                Integer value = tm.get(chs[x]);
                if(value!=null)
                    count = value;
                count++;
                tm.put(chs[x], count);
                count = 0;
                /* 方法二
                if(value==null)
                {
                    tm.put(chs[x], 1);
                }
                else
                {
                    value = value +1;
                    tm.put(chs[x], value);
                }
                */
            }
            //System.out.println(tm);
            
            //缓冲区  希望打印结果:a(4)b(2)c(2)d(2)e(1)f(2)......
            StringBuilder sb = new StringBuilder();
            
            Set<Map.Entry<Character, Integer>> entrySet = tm.entrySet();
            Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();
            while(it.hasNext())
            {
                Map.Entry<Character, Integer> me = it.next();
                Character ch= me.getKey();
                Integer value = me.getValue();
                sb.append(ch+"("+value+")");
            }
            return sb.toString();
        }
    
    }
    MapTest3zimu
  • 相关阅读:
    [你必须知道的异步编程]——基于事件的异步编程模式
    [.Net线程处理系列]专题三:线程池中的I/O线程
    [.Net 线程处理系列]专题一:线程基础
    [.Net线程处理系列]专题四:线程同步
    [你必须知道的异步编程]——异步编程模型(APM)
    C#软件程序无法启动的故障
    CSS疑难杂症
    DIV+CSS排版时 如何解决img图片元素下多余空白
    SQL备份相关的语句大全
    SQLServer2000同步复制技术实现步骤
  • 原文地址:https://www.cnblogs.com/cailingsunny/p/4695179.html
Copyright © 2011-2022 走看看