java之Map

概述

现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,程序员和女朋友 。这种一一对应的关系,就叫做映射。

Java提供了专门的集合类用来存放这种对应关系的对象,即java.util.Map接口。

java.util.Mapjava.util.Collection的区别:

  • Collection集合,元素孤立存在。(理解为单身),而Map集合,元素是成对存在的
  • Collection集合称为单列集合,Map集合称为双列集合。

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

Map接口中的常用方法

  • public V put(K key, V value): 将key与value存入Map集合中。
  • public V remove(Object key): 删除指定的key对应的元素,并返回被删除元素的value值。
  • public V get(Object key) 根据指定的key获取对应的value。
  • boolean containsKey(Object key): 判断集合中是否包含指定的key。
  • public Set<K> keySet(): 获取Map集合中所有的key,存储到Set集合中。
  • public Set<Map.Entry<K,V>> entrySet(): 获取Map集合中所有的键值对对象的集合(Set集合)。

Map常用子类

  • HashMap : 底层采用哈希表存储元素,元素存取无序。只允许一个key为null,允许多个Value为null
  • LinkedHashMap: 底层采用哈希表和链表存储元素,是 HashMap的子类,唯一的区别在于元素存取有序
  • TreeMap:底层采用红黑树(Red-Black tree)存储元素,且默认情况下根据自然顺序对元素进行排序。不允许key为null,允许Value为null

tips:以上三个map集合均为不同步的。

  • Hashtable:和 HashMap的区别在于,Hashtable同步的(单线程),且key和value不允许为 null

tips:java.util.Hashtable基本上不常用,不过它的子类java.util.Properties是个唯一和IO流相结合的集合,目前仍然活跃在java舞台上,也算是给他老爹挣了点面子吧。

遍历Map的方式

一共有两种方式(其实是4中,另外两种不推荐)

  1. 遍历键值:map.entrySet()
public class Demo07 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("钢铁侠",35);
        map.put("蜘蛛侠",18);
        map.put("黑寡妇",29);
        map.put("惊奇队长",35);
        //遍历键与值
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            System.out.println("key= "+entry.getKey()+" ,value= "+entry.getValue());
        }
    }
}
  1. 遍历键值:map.entrySet()
public class Demo07 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("钢铁侠",35);
        map.put("蜘蛛侠",18);
        map.put("黑寡妇",29);
        map.put("惊奇队长",35);

        //只遍历key
        Set<String> set = map.keySet();
        for (String key : set) {
            System.out.println(key);
        }
        //只遍历value
        Collection<Integer> values = map.values();
        for (Integer value : values) {
            System.out.println(value);
        }
    }
}
posted @ 2021-02-26 22:07  layman~  阅读(33)  评论(0编辑  收藏  举报