[JDK8]Map接口与Dictionary抽象类

摘要:
packagejava。效用;1、 Map接口将publicinterfaceMapMap定义为存储键值对的数据结构。映射不能包含自己的引用作为键。Map接口用于替换Dictionary抽象类。Map界面提供三个集合视图。booleancontainsKey;//映射中的一个或多个键映射到指定值,并返回true。三个集合视图支持删除元素。您可以使用迭代器。remove、Collection/Set remove、removeAll、retailAll和clear操作从映射中删除相应的键值对。内部接口Entryentry是一个键值对。地图entrySet()返回一个条目集合,这是获取条目引用的唯一方法。地图。条目对象仅在迭代期间有效。superK˃cmp){Objects.requireOnNull;return-˃cmp.compare;}//比较器——使用给定值比较器比较Map。条目//1.8添加publicstatic<K,V>Comparator<Map。条目<K,V>>按值比较(比较器<?

package java.util;

一、Map接口

接口定义

public interface Map<K,V>

Map是存放键值对的数据结构。map中没有重复的key,每个key最多只能映射一个value。map不允许包含自身引用作为key。Map接口用来代替Dictionary抽象类。

Map接口提供了三种集合视图。map默认顺序是其集合视图迭代器遍历元素的顺序,例如HashMap。TreeMap自定义顺序。

抽象方法

2.1 查询操作

// 返回map中键值对个数。
// 如果map元素个数多于Integer.MAX_VALUE,返回Integer.MAX_VALUE。
int size();

// map中存在键值对,返回true
boolean isEmpty();

// map中存在指定key的映射,返回true。
boolean containsKey(Object key);

// map中存在一个或多个key映射到指定value,返回true。
// 性能可能为O(n),n为元素个数。
boolean containsValue(Object value);

// 获取指定key的映射值
// 通常值存在返回值,值不存在返回null
V get(Object key);

2.2 修改操作

// 向map中插入键值对,若已存在,则更新。
V put(K key, V value);

// 删除map中指定key的键值对。若不存在,返回null。
V remove(Object key);

2.3 对所有元素的操作

// 拷贝map中所有映射到当前map中
// 拷贝过程中,参数map被修改,结果不确定。
void putAll(Map<? extends K, ? extends V> m);

// 删除map中所有映射
void clear();

2.4 集合视图

// 返回map中key的集合视图
Set<K> keySet();

// 返回map中值的集合视图。
Collection<V> values();

// 返回map中entry的集合视图
Set<Map.Entry<K, V>> entrySet();

集合视图依赖于当前map。如果修改map中映射,就会在视图中有所体现。如果在对集合视图迭代的同时修改了map(迭代器自身的操作除外),迭代结果是不确定的。三种集合视图均支持元素的删除,可以通过Iterator.remove、Collection/Set.remove、removeAll、retainAll 和 clear 操作从map中删除对应的键值对。均不支持添加add和addAll操作。

内部接口Entry
entry即键值对,Map.entrySet()返回的就是entry的集合,是获取entry引用的唯一途径。Map.Entry对象只在迭代过程中有效。

interface Entry<K,V> {
    // 返回entry的key
    K getKey();

    // 获取entry的value
    V getValue();

    // 设定新值
    V setValue(V value);

    // 比较当前entry与指定对象
    boolean equals(Object o);

    // 计算当前entry的hashcode
    int hashCode();

    // 比较器--使用自然排序的key比较Map.Entry
    // 1.8增加
    public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() {
        return (Comparator<Map.Entry<K, V>> & Serializable)
            (c1, c2) -> c1.getKey().compareTo(c2.getKey());
    }

    // 比较器--使用自然排序的key比较Map.Entry
    // 1.8增加
    public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() {
        return (Comparator<Map.Entry<K, V>> & Serializable)
            (c1, c2) -> c1.getValue().compareTo(c2.getValue());
    }

    // 比较器--使用给定key比较器比较Map.Entry
    // 1.8增加
    public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) {
        Objects.requireNonNull(cmp);
        return (Comparator<Map.Entry<K, V>> & Serializable)
            (c1, c2) -> cmp.compare(c1.getKey(), c2.getKey());
    }

    // 比较器--使用给定value比较器比较Map.Entry
    // 1.8增加
    public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp) {
        Objects.requireNonNull(cmp);
        return (Comparator<Map.Entry<K, V>> & Serializable)
            (c1, c2) -> cmp.compare(c1.getValue(), c2.getValue());
    }
}

2.5 比较和hash

// 比较当前map与给定对象
boolean equals(Object o);

// 获取当前map的哈希值
// 值等于map中每个entry哈希值的和。
int hashCode();

默认方法(1.8增加)

JDK8中增加几个默认方法,默认方法主要针对某些操作的实现,减少代码编写量。默认方法也结合了函数接口和lambda表达式进行实现。需要注意的是,默认方法实现是线程不安全的,并发场景使用需要重写。

免责声明:文章转载自《[JDK8]Map接口与Dictionary抽象类》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos下安装Vmware-tools时出现的问题POJ 3028 Shoot-out(概率DP)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java python AES 加密 对比

/** * aes解密 * @param * @param content 密文 * @return */ public static String AESDncode(String appkey, String content) { try { // 1....

redis 常用操作

/*1.Connection*/$redis = newRedis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1秒放弃链接 $redis->open('127.0.0.1',6379,1);//短链接(同上) $redis->pconnect('127.0....

d3的常用方法和数据类型

1. 选择集自身属性 1. selection.empty() 选择集是否为空,为空返回true,否则返回false 2. selection.node() 返回第一个非空元素,无则返回null 3. selection.size() 返回选择集中的元素个数 2. 选择集元素属性 1. attr 设置属性 2. classed 设置class 3. sty...

Java中常见设计模式面试

一、设计模式的分类   总体来说设计模式分为三大类:   创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。   结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。   行为型模式,共十一种: 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式...

Java基础知识提要

1、简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机、冰箱等 2、简单写出Java特点,写出5个以上,越多越好 简单的、面向对象的、分布式的、安全的、稳定的、与平台无关的、可解释的、多线的、动态的语言。 3、什么是Java? JAVA:一种编程...

二、vue响应式对象

Object.defineProperty Object.defineProperty 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象,先来看一下它的语法: Object.defineProperty(obj, prop, descriptor) obj 是要在其上定义属性的对象; prop 是要定义或修改的属性的...