Map接口
HashMap
其内部与HashSet大致相同
1.Map和Collection并列存在,用于保存具有映射关系的数据,key-value
2.map的存放是按照key的hash值存放的
3.key不允许重复,若新加入的key和集合中某元素key值相同就替换其中的元素。value可以重复。
4.key为空只能有一个。
5.常用String作为key,但是Object类都可以做key值
6.在存放时会传入key和value值
(1)k-v在底层会创建一个entrySet集合,该元素类型是Entry,一个Entry对象包含了k,v。在set,collection是有指向node,为了遍历node中的k-v,把引用指向set和Collection
(2)k-v存放在node中,为了方便遍历,会创建EntrySet集合,该集合存放的元素类型Entry,对象为k,v EntrySet<Entry (k,v)>,Zai entrySet中定义的类型是一个map.entry,实际上还是一个hashmapnode,node是map.entry的实现类 两者都可以存放值的k-v,但是后者的setValue(value)不能为空。
(3)以当把node(静态内部类)存放在entrySet中后,会方便遍历。entrySet的父接口Entry中提供了getKey和getvalue方法,Entry 实现了Map.Entry,Entry是一个静态内部类。
(4)遍历时先向下转型,然后调用上述方法。
(5)在entry中创建一个数组输出为k-v形式,keySet和value是内部类,同样可以得到Key和Value,分别是Set和collection类型。只是指向不是存放
常用遍历方法
1.取出所有的key, map.keyset 得到所有的key 再使用get方法得到映射
2.得到entry entry转为map.entry得到key和value entry是一个内部类,Map.Entry是一个接口,其中有getKey和getValue的方法 Entry是Map.Entry的实现类
for (Object o : set) {
Map.Entry e =(Map.Entry) o;
System.out.println(e.getValue());
}
3.取出所有的value 可以使用所有collection的方法
小结:
1.Map接口如果添加相同的key,key不变value会被替换
2.和HashSet一样所以不是有序的
3.hashmap没有实现同步,所以线程不安全。