Java的Map接口

目录

Map接口简介

Map实现类之一:HashMap

Map实现类之二:LinkedHashMap

Map实现类之三:TreeMap

Map实现类之四:Hashtable

Map实现类之五:Properties

Map的其他实现类


Map接口简介

Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value。Map 中的 key 和value 都可以是任何引用类型的数据。常用String类作为Map的“键”。

Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。

key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。

Map接口的常用实现类:HashMap、TreeMap和Properties。

Map常用方法

添加、删除操作:

Object put(Object key,Object value)
将指定 key-value 添加到 ( 或修改 ) 当前 map 对象中
void putAll(Map m)
m 中的所有 key-value 对存放到当前 map
Object remove(Object key)
移除指定 key key-value 对,并返回 value
void clear()
清空当前 map 中的所有数据

元素查询的操作:

Object get(Object key)
获取指定 key 对应的 value
boolean containsKey(Object key)
是否包含指定的 key
boolean containsValue(Object value)
是否包含指定的 value
int size()
返回 map key-value 对的个数
boolean isEmpty()
判断当前 map 是否为空
boolean equals(Object obj)
判断当前 map 和参数对象 obj 是否相等

元视图操作的方法:

Set keySet()
返回所有 key 构成的 Set 集合
Collection values()
返回所有 value 构成的 Collection 集合
Set entrySet()
返回所有 key-value 对构成的 Set 集合

Map.Entry接口

Map.Entry是Map中内部定义的一个接口,专门用来保存key,value的内容。

Map.Entry接口定义:public static interface Map.Entry<K,V>

Map的遍历

//这里的非系统类Teacher作为Map的key,必须重写Object的hashCode()和equals()方法
//1.将Map的实例通过entrySet()方法变为Set接口
Set<Map.Entry<Teacher, String>> set = map.entrySet();
//2.通过Set接口实例为Iterator实例化
Iterator<Map.Entry<Teacher, String>> it = set.iterator();
//3.通过Iterator迭代输出,每个内容都是Map.Entry的对象
while(it.hasNext()){
    System.out.println(it.next()); //输出全部的key->value
}
Set<Teacher> keys = map.keySet();
Iterator<Teacher> it1 = keys.iterator();
while(it1.hasNext()){
    System.out.println(it1.next()); //输出全部的key
}
Collection<String> cols = map.values();
Iterator<String> it2 = cols.iterator();
while(it2.hasNext()){
    System.out.println(it2.next()); //输出全部的value
}

Map实现类之一:HashMap

HashMap是 Map 接口使用频率最高的实现类。

HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。与HashSet一样,此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 方法返回 true,hashCode 值也相等。

HashMap 判断两个 value相等的标准是:两个 value 通过 equals() 方法返回 true。

HashMap的存储结构

JDK 7及以前版本:HashMap是数组+链表结构(即为链地址法)。

从上图中可以看出,HashMap 底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个 HashMap 的时候,就会初始化一个数组。源码如下:

transient Entry[] table;
static class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
    final int hash;
    ……
}

可以看出,Entry 就是数组中的元素,每个Map.Entry 其实就是一个 key-value 对,它持有一个指向下一个元素的引用,这就构成了链表。

JDK 8版本发布以后:HashMap是数组+链表+红黑树实现。

HashMap的构造器

HashMap():构建一个初始容量为16,负载因子为 0.75 的 HashMap。

HashMap(int initialCapacity):构建一个初始容量为 initialCapacity,负载因子为 0.75 的 HashMap。

HashMap(int initialCapacity, float loadFactor):以指定初始容量、指定的负载因子创建一个 HashMap。

initialCapacity: HashMap 的最大容量,即为底层数组的长度。
loadFactor:负载因子 loadFactor 定义为:散列表的实际元素数目(n)/ 散列表的容量(m)。

HashMap的常用方法

</
方法 描述
clear() 删除 hashMap 中的所有键/值对
clone() 复制一份 hashMap
isEmpty() 判断 hashMap 是否为空
size() 计算 hashMap 中键/值对的数量
put() 将键/值对添加到 hashMap 中
putAll() 将所有键/值对添加到 hashMap 中
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值