---------------------- <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>、期待与您交流! ----------------------