• Map接口,静态导入,可变参数,Collections集合工具类


    Map接口:

      Map集合中的每个元素由键和值2部分组成,通过键可以找到相应的值,Collection的集合为单列集合,Map的集合为双列集合,Map的集合不能不含重复的键,值可以重复,每个键只能对应一个值。

      常用的方法:

          

           

    Map接口常用的集合:

           HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。也就是说,当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法。

        LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。如果要保证map中存放的key和取出的顺序一致,可以使用LinkedHashMap集合来存放。

      注意事项:两个泛型变量<K,V>的数据类型可以相同,也可以不同。

    Map集合遍历:

      键找值方式:即通过元素中的键,获取键所对应的值。

      1:获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。

      

       2:遍历键的Set集合,获取每一个键。

      3:根据键,获取键所对应的值。

      Map集合方法:keySet()得到Map集合中所有的键。

             get(Object key):通过指定的键,从Map集合中找到相应的值。

      代码体现:

       

     public static void main(String[] args) {
              HashMap<String,Integer> map=new HashMap<String,Integer>();
              map.put("张三",18);
              map.put("李四",18);
              map.put("张三",18);
              //map.remove("李四");
              //System.out.println(map.get("李四"));
              //keySet+增强for循环
          //1:获取所有key所在的Set集合
              Set<String> set=map.keySet();
              //2:遍历Set集合获取对应的value值
              for(String key:set){
                  System.out.println(key+"..."+map.get(key));
              }
              //2:keySet+Iterator迭代器
              Set<String> set2=map.keySet();
              Iterator<String> it=set2.iterator();
              while(it.hasNext()){
                  String b=it.next();
                  System.out.println(b+"..."+map.get(b));
              }
          }


      Entry键值对对象:

        Entry是一个嵌套接口,类似于成员内部类,Entry将键值对应的关系封装成了对象,即键值对对象,当遍历Map集合时,可以从每一个键值对(Entry)对象中获取对应的键与对应的值。

        Entry是Map接口中提供的一个静态内部嵌套接口。

        接口Map<k,v>

        

         接口Map.Entry<k,v>

        

         getKey()方法:获取Entry对象中的键。

        getValue()方法:获取Entry对象中的值。

        

         entrySet()方法:用于返回Map集合中所有的键值对(Entry)对象,以Set集合形式返回。

        步骤:

          键值对方式:即通过集合中的每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值

          1:获取Map集合中的键值对(Entry)对象,以Set集合形式返回。

          

          2:遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。

          

          3:通过键值对(Entry)对象,获取Entry对象中的键与值。

          注意事项:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。因为他与迭代器与Collection没有任何关系。

          代码体现:  

          

      public class Demo02 {
               public static void main(String[] args) {
                  HashMap<Person, String> map = new HashMap<Person, String>();
                  map.put(new Person("张三", 18), "java0803");
                 map.put(new Person("张三", 18), "java0803");
                  map.put(new Person("李四", 20), "java0903");
                  map.put(new Person("王五", 21), "java0903");
                  //1:entrySet+增强for
                  //获取所有结婚证所在的Set集合
                  Set<Map.Entry<Person,String>> set=map.entrySet();
                  //遍历Set集合,取到每一个结婚证对象
                  for(Map.Entry<Person,String> entry:set){
                     System.out.println(entry.getKey()+"..."+entry.getValue());
                    }
                  //entrySet+Iterator迭代器
                  Set<Map.Entry<Person,String>> set2=map.entrySet();
                  Iterator<Map.Entry<Person,String>> it=set2.iterator();
                  while(it.hasNext()){
                      Map.Entry<Person,String>  a=it.next();
                      System.out.println(a.getKey()+"..."+a.getValue());
                    }
                }


    静态导入:  

                 在导包的过程中我们可以直接导入静态部分,这样某个类的静态成员就可以直接使用了。在源码中经常会出现静态导入。

    可变参数:我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化成如下格式:    

          修饰符 返回值类型 方法名(参数类型... 形参名){  }==修饰符 返回值类型 方法名(参数类型[] 形参名){  },只是后面这种定义,在调用时必须传递数组,而前者可以直接传递数据即可。

          同样是代表数组,但是在调用这个带有可变参数的方法时,不用创建数组(这就是简单之处),直接将数组中的元素作为实际参数进行传递,其实编译成的class文件,将这些元素先封装到一个数组中,在进行传递。这些动作都在编译.class文件时,自动完成了。

          注意事项:只能出现一次,可变参数一定要写在参数列表的末尾位置。

        代码体现:

          

      package com.oracle.demo01;
            import static java.lang.System.out;
            public class Demo03 {
    
            public static void main(String[] args) {
                  out.println(add(44,55));
                  out.println(add(44,55,99));
                }
            public static int add(int...a){
                int sun=0;
                for(int b:a){
                    sun+=b;
                }
                return sun;
              }
            }

    collections集合工具类:

        Collections是集合工具类,用来对集合进行操作。

       

    四种集合嵌套代码体现:

    1:

           

     public static void main(String[] args) {
                  HashMap<String, HashMap<Person,String>> map
                  =new HashMap<String, HashMap<Person,String>>();
                  //创建2个小map
                   HashMap<Person,String> java0803=new  HashMap<Person,String>();
                   HashMap<Person,String> java0903=new  HashMap<Person,String>();
                   java0803.put(new Person("小红帽",18), "山东淄博");
                   java0803.put(new Person("大灰狼",18), "山东济南");
                   java0903.put(new Person("小白兔",20), "山东淄博");
                   java0903.put(new Person("派大星",21), "山东济南");
                   map.put("java0803", java0803);
                   map.put("java0903", java0903);
                   Set<String> bigKeys=map.keySet();
                   for(String bigkey:bigKeys){
                     HashMap<Person,String> smallMap=map.get(bigkey);
                       Set<Person> smallkeys=smallMap.keySet();
                         for(Person skey:smallkeys){
                             String svalue=smallMap.get(skey);
                           System.out.println(bigkey+"..."+skey+"..."+svalue);
                         }
                     }
                   } 

    2:

         

     public static void main(String[] args) {
                HashMap<String, HashMap<Person,String>> map
                =new HashMap<String, HashMap<Person,String>>();
                 HashMap<Person,String> java0803=new  HashMap<Person,String>();
                 HashMap<Person,String> java0903=new  HashMap<Person,String>();
                 java0803.put(new Person("小红帽",18), "山东淄博");
                 java0803.put(new Person("大灰狼",18), "山东济南");
                 java0903.put(new Person("小白兔",20), "山东淄博");
                 java0903.put(new Person("派大星",21), "山东济南");
                 map.put("java0803", java0803);
                 map.put("java0903", java0903);
                 Set<String> bigkeys=map.keySet();
                 Iterator<String> it=bigkeys.iterator();
                 while(it.hasNext()){
                     String bigkey=it.next();
                     HashMap<Person,String> smallmap=map.get(bigkey) ;
                     Set<Person> skeys=smallmap.keySet();
                     Iterator<Person> itt=skeys.iterator();
                     while(itt.hasNext()){
                         Person skey=itt.next();
                         String svalue=smallmap.get(skey);
                         System.out.println(bigkey+"..."+skey+"..."+svalue);
                     }
                 }
              }

    3:

       

     Set<Map.Entry<String, HashMap<Person,String>>> bigentrys=
                   map.entrySet();
                  for(Map.Entry<String, HashMap<Person,String>> bigentry:bigentrys){
                   String bigkey=bigentry.getKey();
                   HashMap<Person,String> smallMap=bigentry.getValue();
                   Set<Map.Entry<Person, String>> sentrys=smallMap.entrySet();
                   for(Map.Entry<Person, String> sentry:sentrys){
                    Person skey=sentry.getKey();
                      String svalue=sentry.getValue();
                      System.out.println(bigkey+"..."+skey+"..."+svalue);
                   }
               }
            }


    4:

          

     Set<Map.Entry<String, HashMap<Person,String>>> bigkeys
                 =map.entrySet();
                 Iterator<Map.Entry<String, HashMap<Person,String>>> it=
                       bigkeys.iterator();
                 while(it.hasNext()){
                     Map.Entry<String, HashMap<Person,String>> bigenrys=it.next();
                     String bigkey=bigenrys.getKey();
                     HashMap<Person,String> smallMap=bigenrys.getValue();
                     Set<Map.Entry<Person,String>> sentrys=smallMap.entrySet();
                     Iterator<Map.Entry<Person,String>> itt=sentrys.iterator();
                     while(itt.hasNext()){
                         Map.Entry<Person,String> sentry=itt.next();
                         Person skey=sentry.getKey();
                         String svalue=sentry.getValue();
                         System.out.println(bigkey+"..."+skey+"..."+svalue);
                     }
                 }
              }
  • 相关阅读:
    python的配置
    SSI服务端包含技术
    IDEA使用过程中常见小问题
    IDEA配置maven,jdk,编码
    不使用SwitchHosts修改C:WindowsSystem32driversetchosts文件
    webstorm打开一个门户工程流程
    安装nginx流程
    webstorm配置node.js
    Linux的inode与block
    使用vsftpd 搭建ftp服务
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/13816720.html
Copyright © 2020-2023  润新知