16、集合--Map接口

 

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相同的比较排序

 

posted @ 2019-05-12 00:12  MrChengs  阅读(205)  评论(0编辑  收藏  举报