java集合之HashMap
HashMap<K,V>: 位于java.util包下。
1 HashMap概述
特点:基于哈希表的 Map 接口的实现;键唯一,值可重复;允许存放null值和null键;无序(存取顺序不一致);实现不同步,线程不安全;除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。如果要顺序输出存储的内容,必须使用LinkedHashMap,该类继承自HashMap,但是内部保证了存储的有序性。
保证唯一性:依赖于存储元素的equals()和hashCode()方法的实现
常用构造:
HashMap<K,V>() : 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
常用方法:
1)添加功能
public V put(K key,V value)
2)获取功能
public Set<Map.Entry<K,V>> entrySet() : 获取键值对集合
pub V get(Object key) : 根据键获取对应的值
public Set<K> keySet(): 获取键的集合
public Collection<V> vlaues():获取值的集合
public int size():获取键值对的个数
3)删除功能
public V remove(Object key):移除此键值对,返回值
public void clear() :从映射中移除所有映射关系
4)判断功能
boolean containsKey(Object key) : 判断是否包含对应的键
boolean isEmpty():判断该映射关系是否不包含键值对
2 HashMap的使用:
例1 :实现遍历方式+验证如果存取的键重复
package com.map.demo;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1, "cat");
map.put(2, "dog");
map.put(3, "tiger");
map.put(3, "tree");
map.put(4, "elephent");
Set<Integer> set = map.keySet();
for(Integer i : set){
String value = map.get(i);
System.out.println("编号:"+i+"动物是:"+value);
}
System.out.println("--------------------------");
Set<Map.Entry<Integer, String>> allEntry = map.entrySet();
for(Map.Entry<Integer, String> entry : allEntry){
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println("编号:"+key+"动物是:"+value);
}
}
}
输出结果:
编号:1动物是:cat
编号:2动物是:dog
编号:3动物是:tree
编号:4动物是:elephent
--------------------------
编号:1动物是:cat
编号:2动物是:dog
编号:3动物是:tree
编号:4动物是:elephent
分析:此处引出两个问题:
1)Map集合的两种遍历方式:
A:由key取value:先获取key集合,再根据key寻找对应的value
B:获取键值对集合,一一获取
2)Map集合如何实现存取的键的唯一性
这个需要查看HashMap集合的put方法的源码:
分析查看源码可知:如果重复存取相同key值的元素,则会将最后存取的键值对的值(新值)替换掉前一个键值对的值。并且该方法返回原来的值(旧值)。