Java Map

Java Map,Map有键和值的概念。一个键映射到一个值,Map按照键存储和访问值,键不能重复,即一个键只会存储一份,给同一个键重复设值会覆盖原来的值。使用Map可以方便地处理需要根据键访问对象的场景,比如:

  • 一个词典应用,键可以为单词,值可以为单词信息类,包括含义、发音、例句等;
  • 统计和记录一本书中所有单词出现的次数,可以以单词为键,以出现次数为值;
  • 管理配置文件中的配置项,配置项是典型的键值对;
  • 根据身份证号查询人员信息,身份证号为键,人员信息为值。

数组ArrayListLinkedList可以视为一种特殊的Map,键为索引,值为对象。

Java 7中Map接口的定义如代码所示,用注释表示方法的含义。

public interface Map<K, V> { //K和V是类型参数,分别表示键(Key)和值(Value)的类型
    V put(K key, V value); //保存键值对,如果原来有key,覆盖,返回原来的值
    V get(Object key); //根据键获取值, 没找到,返回null
    V remove(Object key); //根据键删除键值对, 返回key原来的值,如果不存在,返回null
    int size(); //查看Map中键值对的个数
    boolean isEmpty(); //是否为空
    boolean containsKey(Object key); //查看是否包含某个键
    boolean containsValue(Object value); //查看是否包含某个值
    void putAll(Map<? extends K, ? extends V> m); //保存m中的所有键值对到当前Map
    void clear(); //清空Map中所有键值对
    Set<K> keySet(); //获取Map中键的集合
    Collection<V> values(); //获取Map中所有值的集合
    Set<Map.Entry<K, V>> entrySet(); //获取Map中的所有键值对
    interface Entry<K, V> { //嵌套接口,表示一条键值对
        K getKey(); //键值对的键
        V getValue(); //键值对的值
        V setValue(V value);
        boolean equals(Object o);
        int hashCode();
    }
    boolean equals(Object o);
    int hashCode();
}
boolean containsValue(Object value);
Set<K> keySet();

Java 8增加了一些默认方法,如getOrDefault、forEach、replaceAll、putIfAbsent、replace、computeIfAbsent、merge等,Java 9增加了多个重载的of方法,可以方便地根据一个或多个键值对构建不变的Map,具体可参见API文档。

Set是一个接口,表示的是数学中的集合概念,即没有重复的元素集合。Java 7中的Set定义为:

public interface Set<E> extends Collection<E> {
}

它扩展了Collection,但没有定义任何新的方法,不过,它要求所有实现者都必须确保Set的语义约束,即不能有重复元素。Java 9增加了多个重载的of方法,可以根据一个或多个元素生成不变的Set,具体可参见API文档。

Map中的键是没有重复的,所以ketSet()返回了一个Set。keySet()values()entrySet()有一个共同的特点,它们返回的都是视图,不是复制的值,基于返回值的修改会直接修改Map自身,比如:

map.keySet().clear();

会删除所有键值对。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!