1.使用keySet进行遍历
实现步骤:
(1)使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
(2)遍历set集合,获得Map集合中的每一个key
(3)通过Map集合中的方法get(key),通过key找到value
- @Test
- public void testKeySet() {
- Map
map = new ConcurrentHashMap<>(16); - map.put("one",1);
- map.put("two",2);
- map.put("three",3);
-
- // 1.增强for循环遍历map中的key
- for (String key : map.keySet()) {
- // 通过key找到对应的value
- Integer value = map.get(key);
- System.out.println(key + "->" +value);
- }
-
- System.out.println("------------------------");
-
- // 2.使用迭代器来进行遍历(map集合中所有的key取出来,存储到Set集合中)
- Iterator
iteratorKey = map.keySet().iterator(); -
- while (iteratorKey.hasNext()){
- String key = iteratorKey.next();
- Integer value = map.get(key);
- System.out.println(key + "->" +value);
- }
-
- }
2.使用entrySet进行遍历
实现步骤:
(1)Map.entrySet()把map的键值映射成Set集合
(2)Map.entrySet迭代器会生成EntryIterator,其返回的实例是一个包含key/value键值对的对象
(3)getKey(): 返回键值对的key
(4)getValue(): 返回键值对的value
- @Test
- public void testEntrySet() {
- Map
map = new ConcurrentHashMap<>(16); - map.put("one",1);
- map.put("two",2);
- map.put("three",3);
- // Map.entrySet迭代器会生成EntryIterator,其返回的实例是一个包含key/value键值对的对象。
- // 而keySet中迭代器返回的只是key对象,还需要到map中二次取值。故entrySet要比keySet快一倍左右。
- Set
> entries = map.entrySet(); - Iterator
> entryIterator = entries.iterator(); -
- while (entryIterator.hasNext()){
- // 迭代出来的是每一个实例的对象,包含键值对
- Map.Entry
entry = entryIterator.next(); - String key = entry.getKey();
- Integer value = entry.getValue();
- System.out.println(key + "->" + value);
- }
- }
3.对比
(1)keySet获取value只能通过先获取key才能得到value
(2)entrySet在迭代之后可以直接从迭代出来的实例对象中直接获取Key和Value
(3)两个方法遍历的结果都一样,若对查询速度有要求就选entrySet(),entrySet可以提高性能。