栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

【Java集合框架】18——Map接口

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java集合框架】18——Map接口

一、Map接口的介绍

map 接口 位于 java.utils 包下, 表示键和值之间的映射。map以键为基础包含值,即键和值对。每个键和值对都称为一个条目。Map包含唯一的键。
如果您必须基于一个键来搜索、更新或删除元素,那么Map非常有用。

Map 接口 层次结构
在java中有两个实现Map的接口:Map和SortedMap,以及三个类:HashMap、LinkedHashMap和TreeMap。
Java Map的层次结构如下:

Map不允许重复的键,但是可以有重复的值。HashMap和LinkedHashMap允许空键和值,但TreeMap不允许任何空键或值。

Map 非常适合用于键-值关联映射,比如字典。这些Map用于按键执行查找,或者当有人想按键检索和更新元素时使用。
常见场景如下:

  • 错误码及其描述的map。
  • 有邮政编码和城市的map。
  • 经理和员工的map。每个经理(键)都与他管理的员工(值)列表相关联。
  • 班级和学生的map。每个类(键)与一个学生列表(值)相关联

Map 接口 创建对象
因为Map是一个接口,所以不能使用类型映射创建对象。为了创建对象,我们总是需要一个扩展这个映射的类。而且,在Java 1.5中引入泛型之后,可以限制可以存储在Map中的对象的类型。

Map hm = new HashMap(); 

Map接口的特性

  • Map不能包含重复的键,每个键最多只能映射到一个值。有些实现允许空键和空值,比如HashMap和LinkedHashMap,但有些不喜欢TreeMap。
  • 映射的顺序取决于具体的实现。例如,TreeMap和LinkedHashMap有可预测的顺序,而HashMap没有。
  • 有两个接口用于在java中实现Map。它们是Map和SortedMap,以及三个类:HashMap、TreeMap和LinkedHashMap。
二、Map接口的操作

因为Map是一个接口,所以它只能与实现该接口的类一起使用。现在,让我们看看如何使用广泛使用的HashMap类在Map上执行一些经常使用的操作。而且,在Java 1.5中引入泛型之后,可以限制可以存储在映射中的对象的类型。

使用Map接口和HashMap类执行各种操作

2.1 添加操作

为了向映射添加元素,可以使用put()方法。但是,hashmap中不保留插入顺序。在内部,为每个元素生成一个单独的散列,并基于这个散列对元素进行索引,以提高效率。

实例:

    public static void main(String[] args) {
        Map hm1 = new HashMap<>();

        // 使用泛型初始化Map
        Map hm2 = new HashMap();

        // 插入元素
        hm1.put(1, "深圳");
        hm1.put(2, "广州");
        hm1.put(3, "惠州");
        hm1.put(3, "惠州2");  // 键不能重复,值会覆盖

        hm2.put(new Integer(1), "江门");
        hm2.put(new Integer(2), "香港");
        hm2.put(new Integer(3), "佛山");

        System.out.println(hm1);
        System.out.println(hm2);
    }

输出:
{1=深圳, 2=广州, 3=惠州2}
{1=江门, 2=香港, 3=佛山}

2.2 修改操作

添加元素之后,如果我们希望更改元素,可以使用put()方法再次添加元素。由于映射中的元素是使用键建立索引的,因此键的值可以通过简单地插入我们想要更改的键的更新值来更改。

实例:

    public static void main(String[] args) {
        Map hm1 = new HashMap<>();

        hm1.put(new Integer(1), "江门");
        hm1.put(new Integer(2), "香港");
        hm1.put(new Integer(3), "佛山");

        System.out.println("初始Map" + hm1);

        hm1.put(new Integer(2),"海南");

        System.out.println("修改map 后"+hm1);
    }

输出:
初始Map{1=江门, 2=香港, 3=佛山}
修改map 后{1=江门, 2=海南, 3=佛山}

2.3 删除操作

为了从Map中删除一个元素,我们可以使用remove()方法。此方法获取键值,并从该映射中移除某个键的映射(如果该键在映射中存在)。

实例:

    public static void main(String[] args) {
        Map hm1 = new HashMap<>();

        hm1.put(new Integer(1), "江门");
        hm1.put(new Integer(2), "香港");
        hm1.put(new Integer(3), "佛山");

        System.out.println("初始Map" + hm1);

        hm1.remove(2);

        System.out.println("删除map 后"+hm1);
    }
    }

输出:

初始Map{1=江门, 2=香港, 3=佛山}
删除map 后{1=江门, 3=佛山}

2.4 迭代操作

有多种方法可以遍历Map。最著名的方法是使用for-each循环来获取键。键的值是通过使用getValue()方法找到的。

实例:

    public static void main(String[] args) {
        Map hm1 = new HashMap<>();

        hm1.put(new Integer(1), "江门");
        hm1.put(new Integer(2), "香港");
        hm1.put(new Integer(3), "佛山");

        System.out.println("初始Map" + hm1);

        for (Map.Entry mapElement : hm1.entrySet()) {
            // 获取键
            int key = (int)mapElement.getKey();

            // 获取值
            String value = (String)mapElement.getValue();

            System.out.println(key + " : " + value);
        }
    }

输出:

初始Map{1=江门, 2=香港, 3=佛山}
1 : 江门
2 : 香港
3 : 佛山
三、Map接口的API
MethodDescription
V put(Object key, Object value)它用于在映射中插入条目。
void putAll(Map map)它用于在映射中插入指定的映射。
V putIfAbsent(K key, V value)只有当指定的值没有被指定时,它才会将指定的值与指定的键一起插入到映射中。
V remove(Object key)用于删除指定键的条目。
boolean remove(Object key, Object value)它从映射中删除具有关联的指定键的指定值。
Set keySet()它返回包含所有键的Set视图。
Set> entrySet()它返回包含所有键和值的Set视图。
void clear()它用于重置map
V compute(K key, BiFunction remappingFunction)它用于计算指定键及其当前映射值的映射(如果没有当前映射,则为null)。
V computeIfAbsent(K key, Function mappingFunction)如果指定的键尚未与值关联(或映射为空),则使用给定的映射函数计算其值,并将其输入到这个映射中,除非为空
V computeIfPresent(K key, BiFunction remappingFunction)它用于计算给定键及其当前映射值的新映射,如果指定键的值存在且非空。
boolean containsValue(Object value)如果映射中存在与该值相等的值,则此方法返回true,否则返回false。
boolean containsKey(Object key)如果映射中存在与该键相等的键,则此方法返回true,否则返回false。
boolean equals(Object o)它用于比较指定的对象和映射。
void forEach(BiConsumer action)它对映射中的每个条目执行给定的操作,直到处理完所有条目,或者该操作抛出异常。
V get(Object key)此方法返回包含与键关联的值的对象。
V getOrDefault(Object key, V defaultValue)它返回指定键映射到的值,如果映射不包含该键的映射,则返回defaultValue。
int hashCode()它返回Map的散列代码值
boolean isEmpty()如果映射为空,此方法返回true;如果包含至少一个键,则返回false。
V merge(K key, V value, BiFunction remappingFunction)如果指定的键没有与值关联或与null关联,则将其与给定的非空值关联。
V replace(K key, V value)它将替换指定键的指定值。
boolean replace(K key, V oldValue, V newValue)它将指定键的旧值替换为新值。
void replaceAll(BiFunction function)它将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理完或该函数抛出异常。
Collection values()它返回映射中包含的值的集合视图。
int size()此方法返回映射中的条目数。
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1040940.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号