美文网首页Java
Map集合Map<Integer,String> m

Map集合Map<Integer,String> m

作者: 葡小萄家的猫 | 来源:发表于2017-04-23 11:33 被阅读153次

    01Map集合概述

    A:Map集合概述:
    我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同
     a:Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

    b:Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

    Collection中的集合称为单列集合,Map中的集合称为双列集合。
     需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
    Map
    |--HashMap
    |--LinkedHashMap

    02Map接口中的常用方法

    A:Map接口中的常用方法
    /*
    * Map接口中的常用方法
    * 使用Map接口的实现类 HashMap
    /
    public class MapDemo {
    public static void main(String[] args) {
    function_2();
    }
    /

    * 移除集合中的键值对,返回被移除之前的值
    * V remove(K)
    */
    public static void function_2(){
    Map<Integer,String> map = new HashMap<Integer, String>();
    map.put(1, "a");
    map.put(2, "b");
    map.put(3, "c");
    System.out.println(map);

            String value = map.remove(33);
            System.out.println(value);
            System.out.println(map);
        }
        
        /*
         * 通过键对象,获取值对象
         * V get(K)
         * 如果集合中没有这个键,返回null
         */
        public static void function_1(){
            //创建集合对象,作为键的对象整数,值的对象存储字符串
            Map<Integer,String> map = new HashMap<Integer, String>();
            map.put(1, "a");
            map.put(2, "b");
            map.put(3, "c");
            System.out.println(map);
            
            String value = map.get(4);
            System.out.println(value);
        }
        
        /*
         *  将键值对存储到集合中
         *  V put(K,V) K 作为键的对象, V作为值的对象
         *  存储的是重复的键,将原有的值,覆盖
         *  返回值一般情况下返回null,
         *  存储重复键的时候,返回被覆盖之前的值
         */
        public static void function(){
            //创建集合对象,HashMap,存储对象,键是字符串,值是整数
            Map<String, Integer> map = new HashMap<String, Integer>();
            map.put("a", 1);
            
            map.put("b", 2);
            
            map.put("c", 3);
            
            System.out.println(map);
        }
       }
    

    03Map集合遍历方式keySet方法

    A:Map集合遍历方式keySet方法
    1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
    2.遍历键的Set集合,得到每一个键
    3.根据键利用get(key)去Map找所对应的值
    /*
    * Map集合的遍历
    * 利用键获取值
    * Map接口中定义方法keySet
    * 所有的键,存储到Set集合
    /
    public class MapDemo1 {
    public static void main(String[] args) {
    /

    * 1. 调用map集合的方法keySet,所有的键存储到Set集合中
    * 2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)
    * 3. 调用map集合方法get,通过键获取到值
    */
    Map<String,Integer> map = new HashMap<String,Integer>();
    map.put("a", 11);
    map.put("b", 12);
    map.put("c", 13);
    map.put("d", 14);

            //1. 调用map集合的方法keySet,所有的键存储到Set集合中
            Set<String> set = map.keySet();
            //2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)
            Iterator<String> it = set.iterator();
            while(it.hasNext()){
                //it.next返回是Set集合元素,也就是Map中的键
                //3. 调用map集合方法get,通过键获取到值
                String key = it.next();
                Integer value = map.get(key);
                System.out.println(key+"...."+value);
            }
            
            System.out.println("=======================");
            
    
            for(String key : map.keySet()){
                Integer value = map.get(key);
                System.out.println(key+"...."+value);
            }
        }
     }
    

    04Map集合Entry对象

    A:Map集合Entry对象
    interface Map{
    interface Entry{//Entry是Map的一个内部接口
    //由Map的子类的内部类实现

        }
     }
     class HashMap{
        static class Entry<K,V> implements Map.Entry<K,V> {//Entry对象指的就是该类的对象
            final K key;
                  V value;
        }
     }
     在Map类设计时,提供了一个嵌套接口:Entry。
     Entry将键值对的对应关系封装成了对象。
     即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
       a:Entry是Map接口中提供的一个静态内部嵌套接口。
       b:相关方法
        getKey()方法:获取Entry对象中的键
       getValue()方法:获取Entry对象中的值
       entrySet()方法:用于返回Map集合中所有的键值对(Entry)对象,以Set集合形式返回。
    

    05Map集合遍历方式entrySet方法

    A:Map集合遍历方式entrySet方法
    *
    * Map集合获取方式
    * entrySet方法,键值对映射关系(结婚证)获取
    * 实现步骤:
    * 1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
    * Set<Entry <K,V> >
    * 2. 迭代Set集合
    * 3. 获取出的Set集合的元素,是映射关系对象
    * 4. 通过映射关系对象方法 getKet, getValue获取键值对
    *
    * 创建内部类对象 外部类.内部类 = new
    */
    public class MapDemo2 {
    public static void main(String[] args) {
    Map<Integer,String> map = new HashMap<Integer, String>();
    map.put(1, "abc");
    map.put(2, "bcd");
    map.put(3, "cde");
    //1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
    Set<Map.Entry <Integer,String> > set = map.entrySet();
    //2. 迭代Set集合
    Iterator<Map.Entry <Integer,String> > it = set.iterator();
    while(it.hasNext()){
    // 3. 获取出的Set集合的元素,是映射关系对象
    // it.next 获取的是什么对象,也是Map.Entry对象
    Map.Entry<Integer, String> entry = it.next();
    //4. 通过映射关系对象方法 getKet, getValue获取键值对
    Integer key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key+"...."+value);
    }

        }
    }
    

    =======================第二节课开始============================================

    06Map集合遍历方式增强for循环

    A:Map集合遍历方式增强for循环
    A:Map集合遍历方式entrySet方法
    *
    * Map集合获取方式
    * entrySet方法,键值对映射关系(结婚证)获取
    * 实现步骤:
    * 1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
    * Set<Entry <K,V> >
    * 2. 迭代Set集合
    * 3. 获取出的Set集合的元素,是映射关系对象
    * 4. 通过映射关系对象方法 getKet, getValue获取键值对
    *
    * 创建内部类对象 外部类.内部类 = new
    */
    public class MapDemo2 {
    public static void main(String[] args) {
    Map<Integer,String> map = new HashMap<Integer, String>();
    map.put(1, "abc");
    map.put(2, "bcd");
    map.put(3, "cde");
    //1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
    Set<Map.Entry <Integer,String> > set = map.entrySet();
    //2. 迭代Set集合
    Iterator<Map.Entry <Integer,String> > it = set.iterator();
    while(it.hasNext()){
    // 3. 获取出的Set集合的元素,是映射关系对象
    // it.next 获取的是什么对象,也是Map.Entry对象
    Map.Entry<Integer, String> entry = it.next();
    //4. 通过映射关系对象方法 getKet, getValue获取键值对
    Integer key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key+"...."+value);
    }

            System.out.println("=========================");
            for(Map.Entry<Integer, String> entry : map.entrySet()){
                System.out.println(entry.getKey()+"..."+entry.getValue());
            }
        }
      }
      
      注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。
    

    07HashMap集合存储和遍历

    A:HashMap集合存储和遍历
    /*
    * 使用HashMap集合,存储自定义的对象
    * 自定义对象,作为键,出现,作为值出现
    /
    public class HashMapDemo {
    public static void main(String[] args) {
    function_1();
    }
    /

    * HashMap 存储自定义对象Person,作为键出现
    * 键的对象,是Person类型,值是字符串
    * 保证键的唯一性,存储到键的对象,重写hashCode equals
    */
    public static void function_1(){
    HashMap<Person, String> map = new HashMap<Person, String>();
    map.put(new Person("a",20), "里约热内卢");
    map.put(new Person("b",18), "索马里");
    map.put(new Person("b",18), "索马里");
    map.put(new Person("c",19), "百慕大");
    for(Person key : map.keySet()){
    String value = map.get(key);
    System.out.println(key+"..."+value);
    }
    System.out.println("===================");
    for(Map.Entry<Person, String> entry : map.entrySet()){
    System.out.println(entry.getKey()+"..."+entry.getValue());
    }
    }

        /*
         * HashMap 存储自定义的对象Person,作为值出现
         * 键的对象,是字符串,可以保证唯一性
         */
        public static void function(){
            HashMap<String, Person> map = new HashMap<String, Person>();
            map.put("beijing", new Person("a",20));
            map.put("tianjin", new Person("b",18));
            map.put("shanghai", new Person("c",19));
            for(String key : map.keySet()){
                Person value = map.get(key);
                System.out.println(key+"..."+value);
            }
            System.out.println("=================");
            for(Map.Entry<String, Person> entry : map.entrySet()){
                String key = entry.getKey();
                Person value = entry.getValue();
                System.out.println(key+"..."+value);
            }
        }
     }
    

    08LinkedHashMap的特点

    *A:LinkedHashMap的特点

      /*
       *  LinkedHashMap继承HashMap
       *  保证迭代的顺序
       */
      public class LinkedHashMapDemo {
        public static void main(String[] args) {
            LinkedHashMap<String, String> link = new LinkedHashMap<String, String>();
            link.put("1", "a");
            link.put("13", "a");
            link.put("15", "a");
            link.put("17", "a");
            System.out.println(link);
        }
      }
    

    09Hashtable的特点

    A:Hashtable的特点
    /

    * Map接口实现类 Hashtable
    * 底层数据结果哈希表,特点和HashMap是一样的
    * Hashtable 线程安全集合,运行速度慢
    * HashMap 线程不安全的集合,运行速度快
    *
    * Hashtable命运和Vector是一样的,从JDK1.2开始,被更先进的HashMap取代
    *
    * HashMap 允许存储null值,null键
    * Hashtable 不允许存储null值,null键
    *
    * Hashtable他的孩子,子类 Properties 依然活跃在开发舞台
    */
    public class HashtableDemo {
    public static void main(String[] args) {
    Map<String,String> map = new Hashtable<String,String>();
    map.put(null, null);
    System.out.println(map);
    }
    }

    10静态导入

    A:静态导入:如果本类中有和静态导入的同名方法会优先使用本类的
    如果还想使用静态导入的,依然需要类名来调用
    /

    * JDK1.5新特性,静态导入
    * 减少开发的代码量
    * 标准的写法,导入包的时候才能使用
    *
    * import static java.lang.System.out;最末尾,必须是一个静态成员
    */
    import static java.lang.System.out;
    import static java.util.Arrays.sort;

       public class StaticImportDemo {
        public static void main(String[] args) {
            out.println("hello");
            
            int[] arr = {1,4,2};
            sort(arr);
        }
       }
    

    11方法的可变参数

    A:方法的可变参数
    /

    * JDK1.5新的特性,方法的可变参数
    * 前提: 方法参数数据类型确定,参数的个数任意
    * 可变参数语法: 数据类型...变量名
    * 可变参数,本质就是一个数组
    */
    public class VarArgumentsDemo {
    public static void main(String[] args) {
    //调用一个带有可变参数的方法,传递参数,可以任意
    // getSum();
    int sum = getSum(5,34,3,56,7,8,0);
    System.out.println(sum);

        }
     
        /*
         * 定义方法,计算10个整数和
         * 方法的可变参数实现
         */
        public static int getSum(int...a){
            int sum = 0 ;
            for(int i : a){
                sum = sum + i;
            }
            return sum;
        }
        
        /*
         * 定义方法,计算3个整数和
         */
        /*public static int getSum(int a,int b ,int c){
            return a+b+c;
        }*/
        
        /*
         * 定义方法,计算2个整数和
         */
        /*public static int getSum(int a,int b){
            return a+b;
        }*/
     }
    

    12可变参数的注意事项

    A:可变参数的注意事项
    /

    * 可变参数的注意事项
    * 1. 一个方法中,可变参数只能有一个
    * 2. 可变参数,必须写在参数列表的最后一位
    */
    public static void function(Object...o){

        }

    相关文章

      网友评论

        本文标题:Map集合Map<Integer,String> m

        本文链接:https://www.haomeiwen.com/subject/mnaezttx.html