/** * Map<K,V> 接口,将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 * |--HashMap :基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作 * |--LinkedHashMap :Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。 * 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。 * |--TreeMap :基于二叉树、该映射根据其键的自然顺序进行排序, 或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 * |--HashTable: 哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。 */ public class HashMapDemo { public static void main(String[] args) { Map<Integer, String> mps = new HashMap<Integer, String>(); Map<Integer, Personnel> mp = new HashMap<Integer, Personnel>(); fonctionmps(mps); System.out.println(); fonctionmp(mp); } private static void fonctionmps(Map<Integer, String> mps) { //添加元素 mps.put(1, "小莉"); mps.put(3, "xiaoqiang"); mps.put(8, "周明"); mps.put(6, "张无忌"); mps.put(2, "zhaomin"); System.out.println("显示数据源:"+mps); System.out.println("根据key,获取周明:"+mps.get(8)); System.out.println("根据key,删除周明:"+mps.remove(8)); //迭代数据Map没有迭代器,提供了keySet()方法 keySets(mps); } private static void fonctionmp(Map<Integer, Personnel> mp) { //添加对象 Personnel p = new Personnel("xiaofang",18); Personnel pr = new Personnel("zhangsan",10); mp.put(3,new Personnel("lisi",20)); //添加两次 mp.put(5,new Personnel("lisi",21)); mp.put(6,new Personnel("wangwu",30)); mp.put(8,p); mp.put(10,pr); System.out.println("显示数据源:"+mp); //entrySet的方法获取key唯一性 entrySets(mp); //获取所有的value values(mp); } //方法一:使用Set集合迭代器迭代Map集合 private static void keySets(Map<Integer, String> mps) { Set<Integer> si = mps.keySet(); Iterator<Integer> it = si.iterator(); System.out.println("Set集合根据key获取对应的value值:"); while(it.hasNext()){ System.out.println(mps.get(it.next())); } } //方法二:使用entrySet方法迭代元素 private static void entrySets(Map<Integer, Personnel> mp) { Set<Map.Entry<Integer,Personnel>> st = mp.entrySet(); Iterator<Map.Entry<Integer,Personnel>> it = st.iterator(); System.out.println("entrySet迭代出来的数据"); while(it.hasNext()){ Map.Entry<Integer, Personnel> itn = it.next(); //下面两个方式是接口Map.Entry<K,V>方法 int key = itn.getKey(); Personnel val = itn.getValue(); System.out.println(key+"="+val); } } //方法三:获取所有的value(Personnel) private static void values(Map<Integer, Personnel> mp) { Collection<Personnel> cp = mp.values(); Iterator<Personnel> itp = cp.iterator(); System.out.println("获取所有value(Personnel):"); while(itp.hasNext()){ System.out.println(itp.next()); } } }
运行结果:
显示数据源:{1=小莉, 2=zhaomin, 3=xiaoqiang, 6=张无忌, 8=周明}
根据key,获取周明:周明
根据key,删除周明:周明
Set集合根据key获取对应的value值:
小莉
zhaomin
xiaoqiang
张无忌
显示数据源:{3=lisi:20, 5=lisi:21, 6=wangwu:30, 8=xiaofang:18, 10=zhangsan:10}
entrySet迭代出来的数据
3=lisi:20
5=lisi:21
6=wangwu:30
8=xiaofang:18
10=zhangsan:10
获取所有value(Personnel):
lisi:20
lisi:21
wangwu:30
xiaofang:18
zhangsan:10
参考Api:
类 HashMap<K,V>
java.lang.Object |--java.util.AbstractMap<K,V> |--java.util.HashMap<K,V>
构造方法摘要 | |
---|---|
HashMap() 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。 |
|
HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。 |
|
HashMap(int initialCapacity, float loadFactor) 构造一个带指定初始容量和加载因子的空 HashMap。 |
|
HashMap(Map<? extends K,? extends V> m) 构造一个映射关系与指定 Map 相同的新 HashMap。 |
方法摘要 | |
---|---|
void |
clear() 从此映射中移除所有映射关系。 |
Object |
clone() 返回此 HashMap 实例的浅表副本:并不复制键和值本身。 |
boolean |
containsKey(Object key) 如果此映射包含对于指定键的映射关系,则返回 true。 |
boolean |
containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。 |
Set<Map.Entry<K,V>> |
entrySet() 返回此映射所包含的映射关系的 Set 视图。 |
V |
get(Object key) 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null 。 |
boolean |
isEmpty() 如果此映射不包含键-值映射关系,则返回 true。 |
Set<K> |
keySet() 返回此映射中所包含的键的 Set 视图。 |
V |
put(K key, V value) 在此映射中关联指定值与指定键。 |
void |
putAll(Map<? extends K,? extends V> m) 将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。 |
V |
remove(Object key) 从此映射中移除指定键的映射关系(如果存在)。 |
int |
size() 返回此映射中的键-值映射关系数。 |
Collection<V> |
values() 返回此映射所包含的值的 Collection 视图。 |
entrySet方法:
接口Map.Entry<K,V>
方法摘要 | |
---|---|
boolean |
equals(Object o) 比较指定对象与此项的相等性。 |
K |
getKey() 返回与此项对应的键。 |
V |
getValue() 返回与此项对应的值。 |
int |
hashCode() 返回此映射项的哈希码值。 |
V |
setValue(V value) 用指定的值替换与此项对应的值(可选操作)。 |