Map

  • Collection 中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
  • Map 中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
  • Collection 中的集合称为单列集合, Map 中的集合称为双列集合。需要注意的是, Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

Map的常用子类

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

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

TreeMap
<K,V>:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序。

Map的常用方法

public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
public boolean containKey(Object key) :判断该集合中是否有此键。

两种遍历方法

keySet();

    public static void demo1(Map<?, ?> map) {
        Set<?> objects = map.keySet();
        for (Object objectss : objects) {
            System.out.println(map.get(objectss));
        }
    }

 Entry键值对对象:

  

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

获取了Entry对象 , 表示获取了一对键和值,那么同样Entry中 , 分别提供了获取键和获取值的方法:
public K getKey() :获取Entry对象中的键。 public V getValue() :获取Entry对象中的值。
    public static void deom2(Map<?, ?> map) {
        Set<? extends Map.Entry<?, ?>> set = map.entrySet();
        for (Map.Entry<?, ?> entry : set) {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }
    }

小面试题:检索所有字符出现的次数

    public static void demo3(String str) {
        int openArr = 1;
        HashMap<Character, Integer> map = new HashMap<>();
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            Character character = chars[i];
            if (!map.containsKey(character)) {
                map.put(character, openArr);
            } else {
                Integer integer = map.get(character);
                map.put(character, integer + 1);
            }
        }
        System.out.println(map);
    }
原文地址:https://www.cnblogs.com/xiaozhang666/p/13141014.html