黑马程序员--07.集合框架--09.【集合Map】

来源:互联网 发布:淘宝开网店收费吗 编辑:程序博客网 时间:2024/06/12 17:11

集合框架--9 Map

      Map概述和源码

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

1.    Map接口概述

1). Map接口常见实现子类的概述

(1). Map接口常见实现子类的继承体系图

[1]. MapCollection均属于Java集合框架顶层接口

Map接口与Collection接口没有必然的联系

[2]. Map接口的声明:

public interface Map<K,V> {…}   //有两个泛型类型参数

{1}. K表示 (Key)

{2}. V表示 (Value)

[3]. Map集合的特点是:

该集合存储的是-值对。一对一对存入Map集合并且保证键的唯一性

[3]. 继承体系图


{1}. HashTable底层的数据结构哈希表

       源于JDK1.0,线程同步,效率低,数据安全。【老】

不可以存入nullkeynullvalue

{2}. HashMap底层的数据结构哈希表

       源于JDK1.2,线程同步,效率,数据安全。【新】

       可以存入nullkeynullvalue

【常考题】HashTable和HashMap的区别

{3}. TreeMap底层的数据结构二叉树

源于JDK1.2,线程同步

TreeMap特点可用于Map中的Key进行排序

[3].SetMap的关系

Map的子类和Set的子类十分相似。Set底层就是使用了Map集合

2.    Map接口的方法

1). Map接口的方法综述

(1). Map是集合框架层次结构中的另一个根接口

(2).MapCollection一样,只有可以CRD没有U修改操作

2). Map接口中共性的方法

(1). 增

[1].增加一个:V put(K key, V value);    //返回值是V类型的

MapSet增加操作的区别

{1}. Map的重复key被添加的时候,会覆盖以前的key-value

    ----覆盖保证key的唯一性

{2}. Set的重复添加的时候,先前的元素不会被覆盖掉重复的元素无法添加进去。

    ----无法加入保证元素的唯一性

Mapput方法的返回值特殊之处

由于Map的put方法重复的Key采用覆盖法来保证唯一性,所以当存入一对key-value的时候:

{1}. 如果map中不存在这个key相关的value,那么put就返回null,表示没有覆盖任何元素

{2}.如果map中存在这个key相关的value,此时由于put方法要将这个重复的key-value进行覆盖来保证key的唯一性,所以,put方法返回被覆盖的这个key-valuevalue

put方法的示例代码

Map<String, String> map =new HashMap<String, String>();sop(map.put("01", "zhangsan1"));sop(map.put("01", "zhangsan1Copy"));sop(map.put("02", "zhangsan2"));sop(map.put("03", "zhangsan3"));sop(map.put("04", "zhangsan4"));

打印结果:


【分析】开始的时候,map中是空的,所以存放<"01", "zhangsan1"> 的时候,没有覆盖任何元素,所以返回null。紧接着执行sop(map.put("01","zhangsan1Copy"));发现map中含有key为"01"的键值对<"01","zhangsan1">,为保证Map中key的唯一性,键值对<"01","zhangsan1">被<"01","zhangsan1Copy">取代,返回被覆盖的值Value:"zhangsan1"

[2]. 增加Map集合voidputAll(Map<?extends K, ? extends V> m);//返回值是void

(2). 删

[1].删除一个:V remove(Object key);     //返回值是V类型的

【注意】如果key在Map中不存在,那么remove返回值是null

[2]. 删除全部void clear();

 

【规律】MapCollection不同没有删除集合的操作

(3). 查/获取

[1]. 获取Map集合大小int size();

[2]. 根据key获取key对应的Value:V get(Object key);

[3]. 批量获取keySet<K> keySet();

【注意】由于Map中的key是唯一的。所以聚合key到一起的话,更像Collection的子接口Set接口。所以keySet( )返回值类型的是Set集合,而不是笼统的Collection集合。

[4]. 批量获取valueCollection<K> values();

由于value的值是可以重复的,所以集合聚合value到一起的话,List还是Set不一定。所以直接用父级接口Collection更合适。

[5]. 批量获取entrySet<Map.Entry<K,V>> entrySet();

【说明】在Map集合中,有三种元素构成Map:key () ,value() 和以key-value形式构成的新成员叫entry(元素/入口)。

{1}. entry唯一性:由于key唯一性,导致key和value按照key-value形式组合形成entry之后,entry也是唯一的。

{2}. 由于key-value组合之后,数据类型既不是Map中的K也不是Map中的V。所以在Map接口内部新构成了一个内部接口Entry。由于这个接口是静态的所以,entry的数据类型就可以写成Map.Entry

{3}. 方法返回值规则:Map中的元素聚合到一起

如果可以以唯一的值构成集合,那就直接升级Collection接口的子接口Set,那这个方法返回值类型就是Set<泛型>

如果不一定是唯一值构成集合,那这个方法返回值类型就是Collection<泛型>

{3}1. Map中的key和entry都是唯一的, 元素类型分别是Map的类型参数KMap.Entry<K, V>

key的批量获取返回值类型Set<K>

entry的批量获取返回值类型Set<Map.Entry<K, V>>

{3}2. Map中的value并不一定唯一,value的元素类型是V

value的批量获取返回值类型Collection<V>

{4}. 方法方法名规则

{4}1. 返回值是Set类型方法名细化成xxxSet();

xxx是Map中可以构成Set集合的元素名称。取值是key和entry

获取多个key的方法keySet();

获取多个entry的方法entrySet();

{4}2. 返回值是Collection类型方法名就写成yyys();

    yyy是Map中可以构成Collection集合的元素名称。取值只有value

    获取多个value的方法values();

(4). 判定 (方法返回值都是boolean类型)

[1].判定一个keyboolean containsKey(Object key);

[2].判定一个valueboolean containsValue(Object value);

[3]. 判定Map集合是否为空boolean isEmpty();

3.    Map源码

public interface Map<K,V>{//成员方法//1. 增V put(K key, V value);void putAll(Map<? extends K, ? extends V> m); //2. 删V remove(Object key);void clear(); //3. 查/获取V get(Object key);   Set<K> keySet();    Collection<V>values();Set<Map.Entry<K, V>> entrySet(); int size();   //4. 判断boolean isEmpty();    boolean containsKey(Object key);    boolean containsValue(Object value);       //***成员内部接口interface Entry<K,V> {        //获取K getKey();        V getValue();         //修改V setValue(V value);       boolean equals(Object o);        int hashCode();}     boolean equals(Object o);    int hashCode();}


----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

原创粉丝点击