Java集合之HashMap的用法

Java集合之HashMap的用法

在学习中,出现了几次对HashMap的使用不熟练的情况,现将HashSet的用法总结如下。

1. 基本用法

	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);

输出结果如下:
Java集合之HashMap的用法_第1张图片

总结:增 — map.put(“4”, “c”);
   删 — map.remove(“4”);
   改 — map.put(“4”, “d”);
   查 — map.containsKey(“2”);
      map.containsValue(“b”);

2. 两种遍历方法

第一种方法:使用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()的方法。

3. 根据value获取key

如果我们想通过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;
	}

你可能感兴趣的:(Java语言)