zoukankan      html  css  js  c++  java
  • javaMap接口

    Map接口特点

    1.Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

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

    3.Collection中的集合称为单列集合,Map中的集合称为双列集合。

    4. 需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

    5. Map中常用的集合为HashMap集合、LinkedHashMap集合。

    Map接口中常用集合特点:

    HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

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

    注意Map接口中的集合都有两个泛型变量<K,V>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量<K,V>的数据类型可以相同,也可以不同。

    Map接口中的常用方法

    put方法:将指定的键与值对应起来,并添加到集合中

    get方法:获取指定键(key)所对应的值(value)

    remove方法:根据指定的键(key)删除元素,返回被删除元素的值(value)。

    Map接口的方法演示

    public class MapDemo {
        public static void main(String[] args) {
            //创建Map对象
            Map<String, String> map = new HashMap<String,String>();
            //给map中添加元素
            map.put("星期一", "Monday");
            map.put("星期日", "Sunday");
            System.out.println(map); // {星期日=Sunday, 星期一=Monday}
    
            //当给Map中添加元素,会返回key对应的原来的value值,若key没有对应的值,返回null
            System.out.println(map.put("星期一", "Mon")); // Monday
            System.out.println(map); // {星期日=Sunday, 星期一=Mon}
    
            //根据指定的key获取对应的value
            String en = map.get("星期日");
            System.out.println(en); // Sunday
            
            //根据key删除元素,会返回key对应的value值
            String value = map.remove("星期日");
            System.out.println(value); // Sunday
            System.out.println(map); // {星期一=Mon}
        }
    }

     Map集合遍历键找值方式

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

    步骤:

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

    2.遍历键的Set集合,得到每一个键

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

    试图展示

    代码演示:

    public class MapDemo {
        public static void main(String[] args) {
            //创建Map对象
            Map<String, String> map = new HashMap<String,String>();
            //给map中添加元素
            map.put("邓超", "孙俪");
            map.put("李晨", "范冰冰");
    map.put("刘德华", "柳岩");
            //获取Map中的所有key
            Set<String> keySet = map.keySet();
            //遍历存放所有key的Set集合
            Iterator<String> it =keySet.iterator();
            while(it.hasNext()){
                //得到每一个key
                String key = it.next();
                //通过key获取对应的value
                String value = map.get(key);
                System.out.println(key+"="+value);
            }
        }
    }

     Entry键值对对象

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

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

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

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

    Map集合遍历键值对方式

    步骤

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

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

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

     

     HashMap存储自定义类型键值

    学生类

    public class Student {
        private String name;
        private int age;
    
        //编写构造方法,文档中已省略
        //编写get,set方法,文档中已省略
        //编写toString方法,文档中已省略
    }

    测试类

    public class HashMapTest {
        public static void main(String[] args) {
            //1,创建hashmap集合对象。
            Map<Student,String> map = new HashMap<Student,String>();
            
            //2,添加元素。
            map.put(new Student("lisi",28), "上海");
            map.put(new Student("wangwu",22), "北京");
            map.put(new Student("zhaoliu",24), "成都");
            map.put(new Student("zhouqi",25), "广州");
            map.put(new Student("wangwu",22), "南京");
            
            //3,取出元素。键找值方式
            Set<Student> keySet = map.keySet();
            for(Student key : keySet){
                String value = map.get(key);
                System.out.println(key.toString()+"....."+value);
            }
            
            //取出元素。键值对方式
            Set<Map.Entry<Student, String>> entrySet = map.entrySet();
            for (Map.Entry<Student, String> entry : entrySet) {
                Student key = entry.getKey();
                String value = entry.getValue();
                System.out.println(key.toString()+"....."+value);
            }
        }
    }

    静态导入

    静态导入格式:

    import static XXX.YYY;   导入后YYY可直接使用。 
    import static java.util.Map.Entry;
    public class HashMapTest {
        public static void main(String[] args) {
            //1,创建hashmap集合对象。
            Map<Student,String> map = new HashMap<Student,String>();
    
            //取出元素。键值对方式
            //Set<Map.Entry<Student, String>> entrySet = map.entrySet();
            Set<Entry<Student, String>> entrySet = map.entrySet();
    
            //for (Map.Entry<Student, String> entry : entrySet) {
            for (Entry<Student, String> entry : entrySet) {
                Student key = entry.getKey();
                String value = entry.getValue();
                System.out.println(key.toString()+"....."+value);
            }
        }
    }

    可变参数

    修饰符 返回值类型 方法名(参数类型... 形参名){  }

    public class ParamDemo {
        public static void main(String[] args) {
            int[] arr = {21,89,32};
            int sum = add(arr);
            System.out.println(sum);
            sum = add(21,89,32);//可变参数调用形式
            System.out.println(sum);
            
        }
    
        //JDK1.5之后写法
        public static int add(int...arr){
            int sum = 0;
            for (int i = 0; i < arr.length; i++) {
                sum += arr[i];
            }
            return sum;
        }
    
        //原始写法
        /*
        public static int add(int[] arr) {
            int sum = 0;
            for (int i = 0; i < arr.length; i++) {
                sum += arr[i];
            }
            return sum;
        }
        */
    }

    上述add方法在同一个类中,只能存在一个。因为会发生调用的不确定性

    注意:如果在方法书写时,这个方法拥有多参数,参数中包含可变参数,可变参数一定要写在参数列表的末尾位置。

    Collections集工具类

     public static <T> void sort(List<T> list) // 集合元素排序

    //排序前元素list集合元素 [33,11,77,55]
    
    Collections.sort( list );
    
    //排序后元素list集合元素 [11,33,55,77]

    public static void shuffle(List<?> list) //  集合元素存储位置打乱

    //list集合元素 [11,33,55,77]
    Collections.shuffle( list );
    //使用shuffle方法后,集合中的元素为[77,33,11,55],每次执行该方法,集合中存储的元素位置都会随机打乱

    集合嵌套

    集合嵌套并不是一个新的知识点,仅仅是集合内容又是集合,如Collection集合嵌套、Collection集合与Map集合相互嵌套、Map集合嵌套。

    接口:用来明确所有集合中该具有的功能,相当于在定义集合功能标准;

    抽象类:把多个集合中功能实现方式相同的方法,抽取到抽象类实现,具体集合不再遍写,继承使用即可;

    具体类:继承抽象类,实现接口,重写所有抽象方法,达到具备指定功能的集合。每个具体集合类,根据自身的数据存储结构方式,对接口中的功能方法,进行不同方式的实现。

     

  • 相关阅读:
    eclipse安装遇到无法安装的问题
    zip版本的jdk遇到的问题
    linux命令总结
    矢量图形语言
    牛客网答题知识记录
    eclipse里快捷键open type
    ubuntu进入与退出命令行模式
    查看电脑路由表
    strtus2.5报错显示:java.lang.ClassCastException:StrutsPrepareAndExecuteFilter cannot be cast to javax.servlet.Servlet
    Dockerfile总结-2
  • 原文地址:https://www.cnblogs.com/haoduoyu0512/p/13332355.html
Copyright © 2011-2022 走看看