黑马程序员--07.集合框架--09.【集合Map】
2013-07-30 10:39
387 查看
集合框架--9 Map
Map概述和源码
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------1. Map接口概述
1). Map接口常见实现子类的概述
(1). Map接口常见实现子类的继承体系图[1]. Map与Collection均属于Java集合框架的顶层接口
Map接口与Collection接口没有必然的联系
[2]. Map接口的声明:
public
interface Map<K,V> {…} //有两个泛型类型参数
{1}. K表示键 (Key)
{2}. V表示值 (Value)
[3]. Map集合的特点是:
该集合存储的是键-值对。一对一对存入Map集合并且保证键的唯一性
[3]. 继承体系图
{1}. HashTable底层的数据结构是哈希表
源于JDK1.0,线程同步,效率低,数据安全。【老】
不可以存入null的key和null的value
{2}. HashMap底层的数据结构是哈希表
源于JDK1.2,线程不同步,效率高,数据不安全。【新】
可以存入null的key和null的value
【常考题】HashTable和HashMap的区别
{3}. TreeMap底层的数据结构是二叉树
源于JDK1.2,线程不同步
【TreeMap的特点】可用于对Map中的Key进行排序
[3].Set和Map的关系
Map的子类和Set的子类十分相似。Set的底层就是使用了Map集合
2. Map接口的方法
1). Map接口的方法综述
(1). Map是集合框架层次结构中的另一个根接口(2).Map和Collection一样,只有可以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的类型参数K和Map.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].判定一个key:boolean containsKey(Object key);
[2].判定一个value:boolean 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学习型技术博客、期待与您交流! ------------
相关文章推荐
- 黑马程序员--07.集合框架--10.【Map.Entry内存结构】【Map集合的迭代方式】
- 黑马程序员---------泛型、Map集合、集合框架工具类
- 黑马程序员——集合框架Map
- 黑马程序员--07.集合框架--04.List实现子类【ArrayList】【LinkedList】【Vector】
- 黑马程序员——java基础——集合框架(2)Map
- 黑马程序员——JAVA笔记——集合框架3——map
- 黑马程序员——API集合框架-Set、Map
- 黑马程序员 学习日志09 集合框架
- 黑马程序员_学习笔记:10) 集合框架2:Set(HashSet、TreeSet)、Map(Hashtable、HashMap、TreeMap)、Collections、Arrays
- 黑马程序员-----集合框架MAP集合使用(第三篇)
- 黑马程序员——java基础——集合框架(二: 双列集合 (Map体系))
- 黑马程序员-集合框架之Map
- 黑马程序员——集合框架(二) ——Map
- 黑马程序员——集合框架-Map&集合和数组的操作类,for-each
- 黑马程序员------集合框架之Map
- 黑马程序员——集合框架(Map)
- 黑马程序员--集合框架(三)map
- 黑马程序员-day16-集合框架(Map)
- 黑马程序员_集合框架(Collection)集合框架(Map)
- 黑马程序员--07.集合框架--03.【列表List集合的共性方法】【列表迭代器ListIterator】