zoukankan      html  css  js  c++  java
  • JavaSE_09_Map

    1.1 概述

    • Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。

    • Map中的集合,元素是成对存在的(Key---Value)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

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

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

    1.2 Map常用子类

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

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

    1.3 Map接口中的常用方法

    • public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。(如果map中已经存在这个元素,则覆盖他的值,并返回覆盖的值)

    • public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。

    • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。

    • boolean containsKey(Object key) 判断集合中是否包含指定的键。

    • public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。(可用于遍历集合)

    • public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。(可用于遍历集合)

    1.4 Map集合遍历

    • public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。(可用于遍历集合)

    通过获得所有的Key,遍历Key来获得Value

     public static void main(String[] args) {
            HashMap<String, Integer> map = new HashMap<>();
            map.put("hdh",1);
            map.put("xj",2);
    
            Set<String> strings = map.keySet();
            for (String string : strings) {
                System.out.println("Key:"+string+"   "+"Value:+"+map.get(string));
            }
        }

    1.5 Entry键值对对象

    当Map集合创建时Entry对象就创建了,Entry()的每一项就是Map的一对Key-Value,通过遍历Entry对象,就可以遍历Map

    • public K getKey():获取Entry对象中的键。

    • public V getValue():获取Entry对象中的值。

    • public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
    public static void main(String[] args) {
            HashMap<String, Integer> map = new HashMap<>();
            map.put("hdh",1);
            map.put("xj",2);
            Set<Map.Entry<String, Integer>> set = map.entrySet();
            for (Map.Entry<String, Integer> entry : set) {
                System.out.println(entry.getKey()+"  "+entry.getValue());
            }
        }

    1.6 HashMap存储自定义类型键值

    • 当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。

    • 如果要保证map中存放的key和取出的顺序一致,可以使用java.util.LinkedHashMap集合来存放。

    package com.hdh.map;
    
    import java.util.Objects;
    
    public class Person {
        private String name;
        private Integer age;
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Person person = (Person) o;
            return Objects.equals(name, person.name) &&
                    Objects.equals(age, person.age);
        }
    
        @Override
        public int hashCode() {
    
            return Objects.hash(name, age);
        }
    
       //get,set,tostrong,构造函数省略
    }

    1.7 LinkedHashMap

    HashMap的基础上增加了链表,保证Map的有序

    1.8 Map集合练习

    使用HashMap完成:获取一个字符串中对应字母出现的次数

    解读:通过MapKey唯一,Value不唯一的特点进行遍历。

    public class MapTest {
    public static void main(String[] args) {
            //友情提示
            System.out.println("请录入一个字符串:");
            String line = new Scanner(System.in).nextLine();
            // 定义 每个字符出现次数的方法
            findChar(line);
        }
        private static void findChar(String line) {
            //1:创建一个集合 存储  字符 以及其出现的次数
            HashMap<Character, Integer> map = new HashMap<Character, Integer>();
            //2:遍历字符串
            for (int i = 0; i < line.length(); i++) {
                char c = line.charAt(i);
                //判断 该字符 是否在键集中
                if (!map.containsKey(c)) {//说明这个字符没有出现过
                    //那就是第一次
                    map.put(c, 1);
                } else {
                    //先获取之前的次数
                    Integer count = map.get(c);
                    //count++;
                    //再次存入  更新
                    map.put(c, ++count);
                }
            }
            System.out.println(map);
        }
    }
  • 相关阅读:
    蛋疼的springboot web项目使用jetty容器运行
    freemark 异常
    系统中个别页面间断性跳转到登录页异常
    Spring Transaction 使用入门
    单例模式
    抽象工厂模式
    工厂模式
    设计模式
    关于ZK框架的onScroll事件的问题
    关于CheckStyle在eclipse出现的问题
  • 原文地址:https://www.cnblogs.com/asndxj/p/11745264.html
Copyright © 2011-2022 走看看