黑马程序员--Map集合基础

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

                                                  Map概述:


Map集合的特点:
 Map<k,v> K-此映射维护的键的类型
   V-映射值得类型
 public interface Map<K,V>一个映射不能包含重复的键:每个键最多能映射到一个值


 Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性
 collection为单列集合 map双列集合


方法:


 1.添加
  put(k  key,V value)  添加方法
  putAll(Map<? extends k,? extends v> m)
 2.删除
  clear()删除所有映射关系
  remove(object key) 根据键来删除
 3.判断
  containsKey(object key)  判断是否包含指定的键   包含返回true  不包含返回false
  containsValue(object value)   判断是否包含指定的值   包含返回true  不包含返回false
  isEmpty()     判断是否为空
 4.获取
  get(object key)根据键来获取值
  size()获取长度
  value() 获取所有的值
  重点:
  entrySet()
  keySet()


Map
 |--Hashtable:底层是哈希表数据结构,不能存入null键null值,该集合时线程同步的
   为了成功的在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法
 |--HashMap:底层是哈希表数据结构,允许使用null键null值,该集合时不同步的
 |--treeMap:底层是二叉树结构,线程不同步,可以用于给map集合中的键进行排序

 


 面试题:
 Hashtable 和HashMap的不同点?
 一个同步一个不同步,一个允许null一个不允许


和set很像
 set底层就是使用了map集合


Map的共性方法:
 添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值,并put方法会返回覆盖的值

 

Map-keySet(取出集合中所有的键和值):
 keyset:将map中所有的键存入到set集合。因为set具备迭代器,所以可以迭代方式取出所有的键,在根据get方法,获取每一个键对应的值
 Map集合的取出原理:将map集合转成set结合,在通过迭代器取出

Map-entrySet:
 Set<Map.Entry<k,v>> entryset:将map集合中的映射关系存入到了set集合众,而这个关系的数据类型就是:Map.Entry


  Map.Entry<k,v>的方法:
  boolean     equals(object o) 比较制定对象与此相的相等性
  E     getKey() 返回与此相对应的键
  V     getValue() 返回与此相对应的值
  int         hashCode() 返回此映射想的哈希吗值
  V     setValue(V value)用制定的值替换与此项对应的值


Map.Entry 其实Entry也是一个接口,它是Map借口中的一个内部接口,而且是public static的
 能加static的接口一定是内部接口
 

TreeMap练习题:
 打印出字符串“dslkhjfilkehglwkg”获取该字符串中的字母出现次数.希望打印结果是:a(1)b(2)。。。这种类型的
 
 通过结果发现每一个字母都有对应的次数,说明字母和次数之间都有映射关系。
 注意了:当发现有映射关系时,可以选择map集合,因为map集合众存放就是映射关系


 什么时候使用map集合呢?
  当数据之间存在映射关系时,就要先想map集合
 思路:
 1.将字符串转换成字符组,因为要对每一个字母进行操作
 2.定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合
 3.遍历字符数组。
  将每一个字母作为键去查map集合
  如果返回null,将该字母和1存入map集合中
  如果返回不是null说明该字母在map集合中已经存在并有对应次数
  那么久获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,覆盖待用原来键所对应的值
 4.将map集合中的数据变成指定的字符串形式返回


Map扩展知识:
 map集合被使用是因为具备映射关系。
 一对多的关系:
  一个学校有很多的班级,一个班级有好多的学生
  //学校集合
  HashMap<String,HashMap<String,String>> czbk=new HashMap<String,HashMap<String,String>>();
  //班级
  HashMap<String,String> yure=new HashMap<String,String>();
  HashMap<String,String> jiuye=new HashMap<String,String>();
  //添加
  czbk.put("yureban",yure);
  czbk.put("jiujieban",jiuye);
  //向班级添加学生
  yure.put("01","zhangsan");
  yure.put("02","lisi");
  jiuye.put("01","wangwu");
  jiuye.put("02","aliu");
  //遍历集合
  Iterator<String> it=czbk.keySet().iterator();
  while(it.hasNext()){
   String roomName=it.next();
   HashMap<String,String>=czbk.get(roomName);
   //根据班级在遍历出学生;
   getStudentInfo(room);
  }
  

获取Map集合中元素的原理是:因为map集合中没有迭代器,所以,要想需要先将map转化成集合

然后使用集合中的迭代器遍历。有两种方法:

第一:使用keySet方法。获取key的集合,遍历key集合,使用map中get方法,来获取值。

第二:使用entrySet方法。获取键值对映射关系的集合Map.Entry。使用迭代器遍历Map.Entry集合,

再通过Map.Entry中的getKey和getValue方法。

 

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值