您的位置:首页 > 职场人生

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

2013-07-30 10:39 387 查看

集合框架--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一样,只有可以CR和D,没有U修改操作

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

(1). 增

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

【Map和Set在增加操作的区别

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

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

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

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

【Map的put方法的返回值特殊之处

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

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

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

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();
 
【规律】Map和Collection不同没有删除集合的操作
(3). 查/获取

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

[2]. 根据key来获取key对应的Value:V
get(Object key);
[3]. 批量获取key值Set<K>
keySet();

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

[4]. 批量获取value值Collection<K>
values();

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

[5]. 批量获取entry值Set<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学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: