Map源码地址:https://www.cnblogs.com/Mrchengs/p/10842091.html
前提概要:
Map接口用于保存具有映射关系的数据
Map集合中保存了两组值
1、用于保存Map里的key
2、用于保存Map里的value
key和value都可是任何引用类型数据
Map的key不允许重复
即同一个map对象的任何两个key都通过equals()方法比较总还是false
key和value之间是一一对应的关系
即通过key就可以找到唯一的确定的value
从Map中取数据时,只要指定的key就可以取出对应的value
基本介绍:
常用方法:
添加、删除操作
1、put(Object key,Object value):将互相关联的键值对存入
2、Object remove(Object key):从映像中删除与key相关的映射
3、put(Map t):j将来自特定映像的t全部添加到印象中
4、clear():从映像中删除所有的映射
查询操作
get(Object key):根据关键字key进行查询对应的value
containsKey(Object key):判断映像中是否存在关键值key
containsValue(Object value):判断映像中是否 存在值value
size():返回当前映射的数量
isEmpty():判断映像中是否有任何映像
视图操作:
keySet():返回映像中所有关键字的视图集
values():返回映像中所有值的视图集
entrySet():返回Map.Entry对象的视图集,即关键字/值
因为映射是唯一的,所以要用Set支持。
接口和类
1、Map.Entry接口
通过map接口中的entrySet()方法可以返回一个实现Map.entry接口的对象集合
集合中的每个对象都是底层Map中一个特定的键值对
Map.Entry接口集合的迭代器可以获取每一个条目的键值对对值进行更改
当条目通过迭代器返回后,除非是迭代器自身remove()方法或者迭代器返回的条目的setValue()方法
其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义
---Object getKey():返回条目的关键字
---Object getValue():返回条目的值
---Object setValue(Object value):将相关映像中的值修改为value,并且返回旧值
2、SortedMap接口
用来保持键的有序顺序
public interface SortedMap<K,V> extends Map<K,V> { //返回对关键字进行排序时的比较器 Comparator<? super K> comparator(); //返回[fromKey,toKey)范围内的SortedMap的视图集 SortedMap<K,V> subMap(K fromKey, K toKey); //返回SortedMap的一个视图,其内各个元素的key都小于toKey SortedMap<K,V> headMap(K toKey); //返回SortedMap的一个视图集,其内各个元素的key都大于等于fromKey SortedMap<K,V> tailMap(K fromKey); //返回映像中第一个关键字 K firstKey(); //返回影像中最后一个关键字 K lastKey(); Set<K> keySet(); Collection<V> values(); Set<Map.Entry<K, V>> entrySet(); }
SortedMap接口是映像的视图(子集),在里面有两个端点提供了访问方法
除了排序是作用于映射的键以外处理SortedMap和处理SotredSet一样
添加到SortedMap实现类的元素必须实现Comparable接口
否则必须给他的构造函数提供一个COmparator的接口实现
类TreeMap是它的唯一实现
因为对于映射来说,每个键只能对应一个值
如果在添加一个“键/值”对时比较两个键产生了为0的返回值
那么原始键对应的值被新值代替
如果两个元素不相等则应该修改比较方法
让比较方法和equals()方法效果一致
3、AbstractMap抽象类
和其他抽象集合相似,类AbstractMap覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码
如果两个映射大小相等,包含相同的键且每个键在着两个映射中对应的值都相同,则这两个映射相等
映射的哈希码是映射元素哈希码的总和
其中每个元素是Map.Entry接口的一个实现
所以不论映射内部顺序如何,两个相等映射会报告相同的哈希码
4、HashMap额TreeMap类
提供了两个Map的实现
在Map中插入、删除和定位是,HashMap是最好的选择
如果要求按自然排序或自定义顺序遍历键那么选择TreeMap会更好
使用hashMap要求添加的键类明确定义了hashCode()和equals()方法的实现
TreeMap没有调优选项,因为该树总处于平衡状态
①、HashMap类
为了优化hashMap空间使用,可以调优初始容量和负载因子
--HashMap():构建一个空的哈希映像
--HashMap(Map m):构建一个哈希映像,并且添加映像m为所有的映射
--HashMap(int initialCapacity):构建一个拥有特定容量的空的哈希映像
--HashMap(int initalCapacity,float liadFactor):构建一个拥有特定容量和加载引子的空的哈希映像
②、TreeMap类
TreeMap没有调优选项,该树总处于平衡状态
--TreeMap():构建一个空的映像树
--TreeMap(Map m):构建一个映像树,并且添加映像m中所有元素
--TreeMap(Comparator c):构建一个映像树,并且使用特定的比较器对关键字进行排序
--TreeMap(SortedMap s):构建一个映像树,添加映像树s中的所有映射,并且使用与有序映像s相同的比较排序