在学习中,出现了几次对HashMap的使用不熟练的情况,现将HashSet的用法总结如下。
HashMap<String, String> map = new HashMap<>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "a");
map.put("4", "c");
//map.put("4", "d"); //可以运行键值都为"4"(如果键相同,后者覆盖前者)
System.out.println(map);
System.out.print(map.keySet()+" "); //集合中所有键以Set集合形式返回
System.out.println();
System.out.print(map.values()+" "); //集合中所有值以Collection集合形式返回
System.out.println();
System.out.println("集合大小:"+map.size());
System.out.println("是否包含该键:"+map.containsKey("2")); //返回boolean
System.out.println("是否包含该值:"+map.containsValue("b")); //返回boolean
System.out.println(map.isEmpty()); //判断是否为空,若不包含键-值映射关系则返回true
map.remove("4"); //删除映射关系
System.out.println(map);
map.clear();//清空集合
System.out.println(map);
总结:增 — map.put(“4”, “c”);
删 — map.remove(“4”);
改 — map.put(“4”, “d”);
查 — map.containsKey(“2”);
map.containsValue(“b”);
第一种方法:使用keySet()
这种方法遍历了2次,一次是转为iterator,另一次是从HashMap中取出key所对应的value。
(1) For-Each
Set <String> keys = map.keySet(); //map.keySet()返回key的集合
for(String key:keys) {
System.out.println(key+":"+map.get(key)); //map.get(key)返回key所对应的value值
}
(2) 迭代器
Set <String> keys = map.keySet();
Iterator<String> it = keys.iterator();
String key;
while (it.hasNext()) {
key = it.next();
System.out.println(key+":"+map.get(key));
}
第二种方法:使用entrySet()
这种方法只遍历了1次,它把key和value都放到了entry中,因此比keySet()快。
(1) For-Each
Set<Entry<String,String>> entrySet = map.entrySet(); //map.entrySet()返回键值对的集合
for (Entry<String,String> entry:entrySet) {
System.out.println(entry.getKey()+":"+entry.getValue()); //entry.getKey()返回key,entry.getValue()返回value
}
(2) 迭代器
Set<Entry<String,String>> entrySet = map.entrySet();
Iterator<Entry<String,String>> it = entrySet.iterator();
Entry<String,String> entry;
while (it.hasNext()) {
entry = it.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
总结:当map中容量较大时,推荐使用第二种entrySet()的方法。
如果我们想通过key获取对应的value,可以map.get(key)获得value。
而如果需要通过value获取对应的key,则需要自己实现相应的方法。
第一种方法:map.keySet()
(1) For-Each
public static Object getKey(HashMap map, Object value){
ArrayList<Object> keyList = new ArrayList<>();
for(Object key: map.keySet()){
if(map.get(key).equals(value)){
keyList.add(key);
}
}
return keyList;
}
(2) 迭代器
public static Object getKey(HashMap map, Object value){
ArrayList<Object> keyList = new ArrayList<>();
Set <Object> keys = map.keySet();
Iterator<Object> it = keys.iterator();
Object key;
while (it.hasNext()) {
key = it.next();
if(map.get(key).equals(value)){
keyList.add(key);
}
}
return keyList;
}
第二种方法:map.entrySet()
(1) For-Each
public static Object getKey(HashMap map, Object value){
ArrayList<Object> keyList = new ArrayList<>();
Set<Entry<Object, Object>> entrySet = map.entrySet();
for (Entry<Object,Object> entry:entrySet) {
if(entry.getValue().equals(value)){
keyList.add(entry.getKey());
}
}
return keyList;
}
(2) 迭代器
public static Object getKey(HashMap map, Object value){
ArrayList<Object> keyList = new ArrayList<>();
Set<Entry<Object, Object>> entrySet = map.entrySet();
Iterator<Entry<Object, Object>> it = entrySet.iterator();
Entry<Object, Object> entry;
while(it.hasNext()){
entry = it.next();
if(entry.getValue().equals(value)){
keyList.add(entry.getKey());
}
}
return keyList;
}