Map接口

Map接口

定义的集合又称查找表,用于存储所谓“Key-Value”映射对。Key可以看成是Value的索引,作为Key的对象在集合中不可以重复。
根据内部数据结构的不同,Map接口有多种实现类,其中常用的有内部为hash表实现的HashMap和内部为排序二叉树实现的TreeMap。

常用API

put()方法
Map接口中定义了向Map中存放元素的put方法:
— V put(K key, V value)
将Key-Value对存入Map,如果在集合中已经包含该Key,则操作将替换该Key所对应的Value,返回值为该Key原来所对应的Value(如果没有则返回null)。
在这里插入图片描述
get()方法
Map接口中定义了从Map中获取元素的get方法:
— V get(Object key)
返回参数key所对应的Value对象,如果不存在则返回null。
在这里插入图片描述
containsKey()方法
Map接口中定义了判断某个key是否在Map中存在:
— boolean containsKey(Object key);
若Map中包含给定的key则返回true,否则返回false。
在这里插入图片描述

HashMap

Hash表远离
在这里插入图片描述
hashCode方法
从HashMap的原理中我们可以看到,key的hashCode()方法的返回值在HashMap存储元素时会起着很重要的作用。而hashCode()方法实际上是在Object中定义的(Object提供的hashCode方法将返回该对象所在的内存地址的整数形式)。
hashCode方法需要注意:
第一:与equals方法的一致性,即equals比较返回true的两个对象其hashCode方法返回值应该相同;
第二:hashCode返回的数值应符合hash算法的要求,试想如果有很多对象的hashCode方法返回值都相同,则会大大降低hash表的效率,一般情况下可以使用IDE(如Eclipse)提供的工具自动生成hashCode方法。
装载因子以及HashMap优化
Capacity:容量,hash表里bucket(桶)的数量,也就是散列数组大小。
Initial capacity:初始容量,创建hash表时,初始bucket的数量,默认构建容量为16,也可以使用特定容量。
Size:大小,当前散列表中存储数据的数量。
Load factor:加载因子,默认值0.75(就是75%),当向散列表增加数据时如果size/capacity的值大于Load factor则发生扩容并且重新散列(rehash)。
性能优化:加载因子较小时,散列查找性能会提高,同时也浪费了散列桶空间容量。0.75是性能和空间相对平衡结果。在创建散列表时指定合理容量,减少rehash提高性能。

Map的遍历

Map提供了三种遍历方式:
— 遍历所有的Key
— 遍历所有的Key - Value对
— 遍历所有的Value(不常用)
遍历所有Key的方法
— Set keySet() 该方法会将当前Map中所有的key存入一个Set集合后返回。
在这里插入图片描述
遍历所有键值对的方法
— Set<Entry<K, V>> entrySet() 该方法会将当前Map中每一组key-value对封装为一个Entry对象并存入一个Set集合后返回。
在这里插入图片描述

有序的Map — LinkedHashMap

使用Map接口的哈希表和链表实现,具有可预知的迭代顺序。此实现与HashMap的不同之处在于:LinkedHashMap维护着一个双向循环链表。此链表定义了迭代顺序,该迭代顺序通常就是存放元素的顺序。
需要注意的是,如果在Map中重新存入已有的key,那么key的位置不会发生改变,只是将value值替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值