黑马程序员--07.集合框架--09.【集合Map】
来源:互联网 发布:淘宝开网店收费吗 编辑:程序博客网 时间:2024/06/12 17:11
集合框架--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"));
打印结果:
[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.集合框架--09.【集合Map】
- 黑马程序员:集合框架Map
- 黑马程序员:集合框架Map
- 黑马程序员:集合框架Map
- 黑马程序员-集合框架的Map集合
- 黑马程序员__Java集合框架Map集合
- 黑马程序员--java基础--集合框架Set,集合框架map
- 黑马程序员-集合框架之Map
- 黑马程序员--集合框架(三)map
- 黑马程序员-day16-集合框架(Map)
- 黑马程序员——集合框架Map
- 黑马程序员-Java集合框架Map
- 黑马程序员------集合框架之Map
- 黑马程序员java之集合框架Map
- 黑马程序员--07.集合框架--10.【Map.Entry内存结构】【Map集合的迭代方式】
- 黑马程序员-----Map集合
- 黑马程序员--Map集合
- 黑马程序员 Map集合
- 链表的高精度*+法;高精度 加法 乘法
- Lotus Notes常用的Toolbar设定:查询及修改Notes当前文书全部Field及其值
- Keystone Architecture
- linux中xinetd服务
- 交叉编译TSLIB1.4
- 黑马程序员--07.集合框架--09.【集合Map】
- 设计模式之:单例模式
- ora-01033:oracle initializationg or shutdown in progress解决方法
- Android(Java):正则表达式
- 如何高效的生成不重复的随机数
- 解析flex的RemoteService的Endpoint
- Oracle创建表空间、创建用户以及授权、查看权限
- perl下关于文件读写,hash统计频数并排序的总结
- 创建型模式--工厂模式