Map接口实现类的特点
- Map 用于保存具有映射关系的数据 key-value
- Map中的key和value可以是任何引用类型的数据 会封装到HashMap$Node对象中
- Map的key不允许重复
- Map的value可以重复
- Map的key可以为null value也可以为null key为null只能有一个 value为null可以多个
- 常用String类作为May的key
- key和value之间存在单项一对一关系 即通过指定的key总能找到对应的value
Map接口遍历方法
- 通过map.keySet获取到set 通过增强for和迭代器获取
- 通过 map.values()获取value 并通过Collection 增强for 迭代器获取value
- 通过 map.entrySet() 获取到set 通过增强for迭代器获取 其中需要Map.Entry m=(Map.Entry)entry向下转型
{
public static void main(String[] args) {
Map map = new HashMap();
map.put("邓超",new Book("三国",100));
map.put("邓超","孙俪"); //替换
map.put("王宝强","马蓉");
map.put("宋哲","马蓉");
map.put("刘林波",null);
map.put(null,"刘亦菲");
map.put("鹿晗","关晓彤");
//第一组 先取出所有key 通过key 取出对应的value
//1 增强for
System.out.println("=====第一种=======");
Set keyset = map.keySet();
for (Object obj :keyset) {
System.out.println(obj+"-"+map.get(obj));
}
System.out.println("====第二种======");
//2迭代器
Iterator iterator = keyset.iterator();
while (iterator.hasNext()){
Object next = iterator.next();
System.out.println(next+"-"+map.get(next));
}
System.out.println("=======第二组 第3种========");
//这里可以使用所有的collections使用的遍历方法
//1 增强for 只能遍历所有的value
Collection values = map.values();
for (Object o :values) {
System.out.println(o);
}
System.out.println("=====第4种=====");
//迭代器 所有的value
Iterator iterator1 = values.iterator();
while (iterator1.hasNext()){
Object next2 = iterator1.next();
System.out.println(next2);
}
System.out.println("=====第三组 增强for");
//第三组 EntrySet
Set entrySet = map.entrySet();
for (Object entry :entrySet) {
//将entry转成Map.Entry
Map.Entry m=(Map.Entry)entry;
System.out.println(m.getKey()+"-"+m.getValue());
}
System.out.println("========第三组 迭代器");
Iterator iterator2 = entrySet.iterator();
while (iterator2.hasNext()){
Object next = iterator2.next();
System.out.println(next);
}
}
}
HashMap小结
- Map接口的常用实现类 HashMap Hashtable Properties
- HashMap是Map接口使用评率最高的实现类
- HashMap是以 key-value对方式来存储数据
- key不能重复 但是值可以重复 允许使用null键和null值
- 如果添加相同key 则会覆盖原来的key-value 等同于修改(key不会替换 val会替换)
- 与HashSet一样 不保证映射的顺序 因为底层是以hash表的方式来存储的
- HashMap没有实现同步 因此线程是不安全的