黑马程序员技术交流社区
标题:
Map总结
[打印本页]
作者:
cflying
时间:
2015-7-26 19:09
标题:
Map总结
1:Map(掌握)
(1)Map是一个键值对形式的集合。它的元素都是有键和值组成。
(2)Map和Collection的区别?(面试题)
A:Map 是由键值对组成的集合,Map的键(key)是唯一的,值(value)可以重复。
B:Collection 是有单列数据组成的集合,它的儿子List是可以重复的,Set是唯一的。
(3)HashMap和Hashtable的区别?(面试题)
HashMap:线程不安全,效率高。允许null键和值。
Hashtable:线程安全,效率低。不允许null键和值。
(4)Map的功能:(自己补齐)
A:添加功能
V put(K key, V value) 当key在集合中不存在时,添加元素;
当key在集合中存在的时候,替换元素。
B:判断功能
boolean containsValue( Object value ) 判断指定的值是否在集合中存在。
boolean isEmpty() 判断集合是否为空。
C:删除功能
void clear() 清除所有键值对数据。
V remove( Object key ) 根据指定的键删除键值对。
D:获取功能
Set<Map.Entry<K,V>> entrySet() 键值对对象的集合。
Object get( Object key ):根据键获取值。
Set<K> keySet():所有键的集合
Collection<V> values() 所有值的集合。
E:长度功能
int size()
(5)Map的两种遍历方式(思路补齐)
A:丈夫找妻子(掌握)
a:把所有丈夫给集合起来。Set<K> ketSet()
b:遍历丈夫集合,获取到每一个丈夫。增强for , 迭代器
c:让丈夫去找妻子。get(Object key)
// 创建集合对象
Map<String, String> map = new HashMap<String, String>();
// 往集合里边添加元素
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
map.put("牛郎", "侄女");
map.put("萧炎", "萧薰儿");
// 方式1 遍历,"丈夫找妻子"
// 得到所有的丈夫对象
Set<String> husbandSet = map.keySet();
// 用迭代器的方式来做
Iterator it = husbandSet.iterator();
while(it.hasNext())
{
String husband = (String)it.next();
String wife = map.get(husband);
System.out.println(husband +"-----"+ wife);
}
// 用增强for来做
for (String s : husbandSet) {
// 根据“丈夫”找到“妻子”--根据键获取值
String wife = map.get(s);
System.out.println(s + "******" + wife);
}
B:根据结婚证找丈夫和妻子(理解,别人写你能看懂即可)
a:获取所有结婚证的集合。Set<> entrySet()
b:遍历结婚证集合,获取到每一个结婚证对象。迭代器,增强for
c:通过结婚证对象获取丈夫和妻子getKey()和getValue()
// 创建集合对象
Map<String, String> map = new HashMap<String, String>();
// 往集合里边添加元素
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
map.put("牛郎", "侄女");
map.put("萧炎", "萧薰儿");
// 找到所有的“结婚证”,也就是所有的键值对
Set<Map.Entry<String, String>> set = map.entrySet();
// 方式2 遍历,这样每次遍历我都会得到一个键值对
for (Map.Entry<String, String> en : set) {
// 得到键和值,然后打印
String key = en.getKey();
String value = en.getValue();
System.out.println(key + "****" + value);
}
2:HashMap(掌握)
(1)HashMap存储字符串并遍历
键:String
值:String
(2)HashMap存储自定义对象并遍历
键:String
值:Student
(3)HashMap存储自定义对象并遍历
键:Student(重写hashCode和equals方法,自动生成)
值:String
需求:如果对象的成员变量值都相同,我们则认为是同一个对象。
3:TreeMap(理解)
(1)TreeMap存储字符串并遍历
键:String
值:String
(2)TreeMap存储自定义对象并遍历
键:String
值:Student
(3)TreeMap(传入一个比较器comparator)存储自定义对象并遍历
键:Student
值:String
需求:如果对象的成员变量值都相同,我们则认为是同一个对象。
同时,我们还要按照年龄排序。
4:案例(理解)
(1)统计字符串中每个字符出现的次数。
//创建集合对象
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
String str = "cbxzbvavdvgd";
//将字符串转成字符数组
char[] chs = str.toCharArray();
//遍历字符数组
for (char ch : chs) {
//将拿到的字符去集合中找对应的值,根据返回值进行相应的操作
Integer i = tm.get(ch);
if (i == null) {
tm.put(ch, 1);
} else {
i++;
tm.put(ch, i);
}
}
//将得到的键值对集合,根据转变成字符串,并将结果按照要求的格式打印出来
//创建可变字符串对象
StringBuilder sb = new StringBuilder();
//得到集合中 所有的键 并遍历
Set<Character> set = tm.keySet();
for(char ch:set)
{
//根据键找到对应的值,然后按照要求的格式拼接
Integer i = tm.get(ch);
sb.append(ch).append("(").append(i).append(")");
}
//将结果转成字符串,并输出
String result = sb.toString();
System.out.println(result);
(2)HashMap嵌套HashMap的使用。
//创建集合对象--czbk
HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>();
//创建并添加元素对象 yr和jy
HashMap<String,String> yr = new HashMap<String,String>();
yr.put("01", "zhangsan");
yr.put("02", "lisi");
czbk.put("yr",yr );
HashMap<String,String> jy = new HashMap<String,String>();
jy.put("01", "wangwu");
jy.put("02","zhaoliu");
czbk.put("jy", jy);
//遍历集合
//创建集合对象--czbk
HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>();
//创建并添加元素对象 yr和jy
HashMap<String,String> yr = new HashMap<String,String>();
yr.put("01", "zhangsan");
yr.put("02", "lisi");
czbk.put("yr",yr );
HashMap<String,String> jy = new HashMap<String,String>();
jy.put("01", "wangwu");
jy.put("02","zhaoliu");
czbk.put("jy", jy);
//遍历集合
//先拿到czbk集合中所有的键,并遍历
Set<String> czbkKeys = czbk.keySet();
for(String czbkKey :czbkKeys)
{
//打印czbk集合中的键
System.out.println(czbkKey);
//在czbk集合中,根据键拿到对应的值,因为值也是一个键值对集合,所以我们在遍历一次
HashMap<String,String> hm=czbk.get(czbkKey);
//拿到(czbk的值集合)中的所有的键
Set<String> set = hm.keySet();
//遍历,根据键找到对应的值,并将结果输出
for(String s :set)
{
String value = hm.get(s);
System.out.println("\t"+s+"***"+value);
}
}
(3)HashMap嵌套ArrayList的使用。(掌握)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2