 
   
    
     
      从 此 音 尘 各 悄 然 , 春 山 如 黛 草 如 烟
     
    
   
    
     目录
    
   
    
     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());
}
     
   
 
