Map.Entry

Map.entrySet() 方法返回的是一个Set>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Value),而Set>表示一个映射项的Set。Map.Entry里有相应的getKey和getValue方法,让我们能够从一个项中取出Key和Value。



下面是遍历Map的几种方法:

//先创立HashMap,然后放三组k-v数据。

public static void main(String[] args) {

  Map map = new HashMap();

  map.put("1", "value1");

  map.put("2", "value2");

  map.put("3", "value3");


  //第一种:普遍使用,用keySet方法返回映射中所有key组成的Set视图,配合加强for输出key+get(key)

(注意:set视图意思为HashMap中所有的键值对都被看做一个set集合)

  System.out.println("通过Map.keySet遍历key和value:");

  for (String key : map.keySet()) {

  System.out.println("key= "+ key + " and value= " + map.get(key));

  }


  //第二种    通过迭代器进行遍历;


  System.out.println("通过Map.entrySet使用iterator遍历key和value:");

  Iterator> it = map.entrySet().iterator();

  while (it.hasNext()) {

  Map.Entry entry = it.next();

  System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

  }


  //第三种:推荐,尤其是容量大时


  System.out.println("通过Map.entrySet遍历key和value");

  for (Map.Entry entry : map.entrySet()) {

  System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

  }

  //第四种


  System.out.println("通过Map.values()遍历所有的value,但不能遍历key");

  for (String v : map.values()) {

  System.out.println("value= " + v);

  }

}


为什么HashMap为什么要选择Entry数组来存放key-value?因为Entry实现的Map.Entry接口里面定义了getKey() ,getValue() ,setKey(),setValue()等方法相当于一个javaBean,对键值对进行了一个封装便于后面的操作,从这里我们其实也可以联想到不光是HashMap,譬如LinkedHashMap,TreeMap 等继承自map的容器存储key-value对都应该使用的是Entry只不过组织Entry的形式不一样,HashMap用的是数组加链表的形式,LinkedHashMap用的是链表的形式,TreeMap应该使用的二叉树的形式。

你可能感兴趣的:(Map.Entry)