从 此 音 尘 各 悄 然 , 春 山 如 黛 草 如 烟
目录
6. 判断某元素是否存在:containsKey()和containsValue()
一、简介
Map用于保存具有映射关系的数据,以<Key,Value>形式存储数据,key和value可以是任何类型的数据,key不允许重复,key和value之间存在单向的一对一关系,即通过一个指定的key总可以找到唯一与之对应的确定的value。
HashMap由数组+链表组成的
,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,
其中:链表的节点存储的是一个 Entry 对象,每个Entry 对象存储四个属性(hash,key,value,next)
HashMap具有以下特点:
1.无法保证键值对的顺序;
2.key值不可重复,key 用 Set 存放,所以想做到 key 不允许重复,key 对应的类需要重写 hashCode 和 equals 方法;
3.每个 key 只能对应一个 value, 但一个 value可以对应多个 key;
4.允许空键和空值(但空键只有一个,且放在第一位)。
二、操作方法
1. 定义一个HashMap集合
//方法1
Map<Object,Object> map = new HashMap<Object,Object>();
//方法2
HashMap<Object,Object> map = new HashMap<Object,Object>();
与Set和List的定义方法一样,Map的定义方法也有这两种,其中尖括号内泛型对应的数据为:<key,value>。
2. 添加:put()
HashMap<Object,Object> map = new HashMap<Object,Object>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "a");
map.put(3, "b");
System.out.println("map:"+map);
由输出结果可以看到,map集合中不允许由重复的元素,其通过key值判断元素是否重复,且key值相同的元素后者会覆盖前者,但是允许同一个value有多个key值对应。
3. 移除:remove()
//根据key值移除键值对
map.remove(1);
System.out.println(map);
4. 取值:get()
//根据key值取值
System.out.println(map.get(2));
map中get方法的关键字为key值,通过key找到与之对应的value
5. 判空:isEmpty()
//判断map是否为空
System.out.println(map.isEmpty());
6. 判断某元素是否存在:containsKey()和containsValue()
containsKey()用来判断当前集合是否包含指定的key;containsValue()用来判断当前集合是否包含自定的value。
//当前集合是否包含指定的key
System.out.println(map.containsKey(2));
//当前集合是否包含指定的value
System.out.println(map.containsValue("a"));
7. 元素个数:size()
//元素个数
System.out.println(map.size());
8. 复制:clone()
//复制当前map
Object mm = map.clone();
System.out.println(mm);
9. 遍历HashMap
9.1 利用Set和for-each遍历
此种遍历方法是先提取出所有的key值,在遍历key值时通过get方法获得key对应的value
//获取map的所有key集合
Set<Object> keys = map.keySet();
//遍历map集合
for(Object key : keys) {
System.out.println(key+" --> "+map.get(key));
}
9.2 Entry遍历
由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系。 所以Map中采用
Entry内部类
来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也就是一个Entry)。entrySet是 java中 键-值 对的集合,Set里面的类型是Map.Entry。
Set<Entry<Object,Object>> entry = map.entrySet();
for(Entry<Object,Object> en : entry) {
System.out.println(en.getKey()+" --> "+en.getValue());
}
9.3 Iterator遍历
Iterator<Entry<Object, Object>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<Object, Object> entry = it.next();
System.out.println("key= " + entry.getKey() + " ,value= " + entry.getValue());
}