美文网首页
Java Map接口

Java Map接口

作者: 海人为记 | 来源:发表于2018-07-23 09:31 被阅读29次
  • Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储,能够实现根据key快速查找value
  • Map中的键值对以Entry类型的对象实例形式存在
  • Map集合的键(key)不允许重复,value值可以重复,一个value值可以和很多key形成对应关系,每个键最多只能映射到一个值
  • Map支持泛型,形式如:Map<K, V> Java-Map接口的关系图.png
常用方法 描述
V put(K key, V, value) 添加元素
如果键是第一次存储,直接存储值,返回null,否则将以前的值覆盖,返回以前的值
void clear() 移除所有的键值对元素
V remove(Object key) 根据键删除键值对元素,并把值返回
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
Set<Map.Entry<K,V>> entrySet() 获取所有的键值对
V get(Object key) 根据键获取值
Set<K> keySet() 获取集合中所有键的集合
Collection<V> values() 获取集合中所有值的集合
int size() 返回集合中键值对的个数

实例

import java.util.HashMap;
import java.util.Map;

public class HashMapExercise {
    public static void main(String[] args) {

        exerciseMap();
    }
    public static void exerciseMap() {

        Map<String, Integer> map = new HashMap<>();
        // 添加方法
        map.put("小红", 18);
        map.put("小明", 30);
        map.put("小辉", 20);
        map.put("小李", 18);
        System.out.println(map);  // {小辉=18, 小明=18, 小李=18, 小红=18}
        //判断键是否存在
        boolean flg = map.containsKey("小明");
        System.out.println(flg); // true
        // 判断值是否存在
        flg = map.containsValue(18);
        System.out.println(flg); // true
        // 判断集合是否为空
        flg = map.isEmpty();
        System.out.println(flg); // false
        // 根据键获取值
        Integer i = map.get("小李");
        System.out.println(i); // 18
        // 获取集合中元素的个数
        int size = map.size();
        System.out.println(size); // 4
    }
}

Map集合的四种遍历方式

        // Map集合的四种遍历方式
        // 遍历结果
        // Key:小辉,Value:20
        // Key:小明,Value:30
        // Key:小李,Value:18
        // Key:小红,Value:18
        // 第一种: 通过keySet()方法获取到所有键的Set集合
        Set<String> keySet = map.keySet(); // map集合使用keySet()方法返回的是所有的key的值
        for (String str : keySet) {
            Integer in = map.get(str);
            System.out.println("Key:"+str+",Value:"+in);
        }

        // 第二种: 通过entrySet()方法获取所有的键值对的Set集合 Entry<String, Integer>
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); // map集合使用entrySet()方法返回的是所有的键值对
        // 通过这种方式获得的所有键值对还需要使用迭代器进行遍历
        Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> entry = iterator.next();
            System.out.println("Key:"+entry.getKey()+",Value:"+entry.getValue());
        }

        // 第三种: 使用foreach循环进行遍历;当容量较大时,推荐.
        for (Map.Entry<String , Integer> entry: map.entrySet()) {
            // Map.Entry<String, Integer> 映射项(键-值对)
            // 这种方法也可用于 keySet()和values()
            System.out.println("Key:"+entry.getKey()+",Value:"+entry.getValue());
        }


        // 第四种: 通过values()方法获取所有值的Collection集合
        // 遍历结果
        // value:20
        // value:30
        // value:18
        // value:18
        Collection<Integer> values = map.values();
        Iterator<Integer> it = values.iterator();
        while(it.hasNext()) {
            Integer value = it.next();
            System.out.println("value:"+value); // 我们不能通过值去进行键的查找
        }

注: 使用entrySet遍历方式要比keySet遍历方式快-------entrySet遍历方式获取Value对象是直接从Entry对象中直接获得,时间复杂度T(n)=o(1);
keySet遍历获取Value对象则要从Map中重新获取,时间复杂度T(n)=o(n);keySet遍历Map方式比entrySet遍历Map方式多了一次循环,多遍历了一次table,当Map的size越大时,遍历的效率差别就越大。

相关文章

  • java day 14

    Map java Map及Map.Entry详解Map是java中的接口,Map.Entry是Map的一个内部接口...

  • Java 集合框架(Map 接口)

    Map 接口简介 对于 Map 接口,Java的官方文档是这样介绍的: A Map is an object th...

  • 集合详解

    Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合...

  • Map.Entry使用详解

    1.Map.Entry说明 Map是java中的接口,Map.Entry是Map的一个内部接口。 Map提供了一些...

  • Map和Map.entry

    Map是java中的接口,Map.Entry是Map的一个内部接口。 Map提供了一些常用方法,如keySet()...

  • [翻译中]JAVA 集合接口介绍

    Java 集合接口源于两个最基础的接口 java.util.Collection 和 java.util.Map ...

  • Map接口

    Map接口也是Java集合框架中的一个顶层接口。Map接口在性质上与Collection接口类似,但是它处理的是由...

  • java集合类总结

    Java集合概述 Java提供的众多集合类由两大接口衍生而来: Collection 接口和 Map 接口。为了更...

  • Hashtable源码分析

    Map接口 Map是java集合中很重要的一个接口,我们在开发中经常用到,Map接口有一个特性 无序 不可重复 k...

  • Java Map原理备忘(二)

    接上一次Java Map原理备忘。LinkedHashMap继承HashMap实现Map接口。LinkedHash...

网友评论

      本文标题:Java Map接口

      本文链接:https://www.haomeiwen.com/subject/mppwpftx.html