HashMap的三种遍历方式

HashMap的三种遍历方式

  1. 通过键值对进行遍历
/** 
* 通过键值对来遍历 
*/  
Iterator<Map.Entry<String, String>> iterator = hashmap.entrySet().iterator();  
while(iterator.hasNext()){  
    Map.Entry<String, String> next = iterator.next();  
    String key = next.getKey();  
    String value = next.getValue();  
}

首先来查看源码HashMap对应的entrySet方法

entrySet()方法返回了一个entrySet0()方法,entrySet0()中将entrySet赋值给es并判断是否为空,如果不为空将返回es,为空将new EntrySet()对象赋值为entrySet并返回.

查看源码entrySet初始化为空

 

EntrySet这个类包含了Iterator()这个方法

 

调用这个Iterator()方法返回了一个newEntryIterator()方法

这个方法返回了一个EntryIterator的一个对象,所以Iterator就是EntryIterator的一个对象了。

这个类里面有一个next()方法,调用这个next方法返回一个nextEntry方法,最终返回的是一个Entry实体

  1. 通过键来遍历
/** 
* 通过键来遍历 
 */  
Iterator<String> iterator1 = hashmap.keySet().iterator();  
while(iterator1.hasNext()){  
     String key = iterator1.next();  
     System.out.println(key);  
}

 

首先来查看源码HashMap对应的keySet方法

 

KeySet()方法返回了一个KeySet对象,KeySet这个类里面有Iterator()这个方法

调用这个方法,返回一个newKeyIterator()方法

这个方法返回了一个KeyIterator对象,所以Iterator1就是KeyIterator对象了

因为nextEntry()方法的返回值是Entry实体,所以这个类的next方法返回了Entry实体的一个getKey()方法

这个getKey方法返回了key值,最终返回的就是一个key值

  1. 通过值来遍历
/** 
* 通过值遍历 
 */  
Iterator<String> iterator2 = hashmap.values().iterator();  
while(iterator2.hasNext()){  
    String value = iterator2.next();  
    System.out.println(value);  
}

先来查看源码HashMap对应的values()方法

 

values()方法返回了一个values对象,values这个类里面有Iterator()这个方法

调用这个方法,返回一个newvalueIterator()方法

 

这个方法返回了一个ValueIterator对象,所以Iterator2就是ValueIterator对象了

 

因为nextEntry()方法的返回值是Entry实体,所以这个类的next方法返回了Entry实体的一个Value属性,所以最终返回的值就是Value值了

 

 

猜你喜欢

转载自blog.csdn.net/qq_37937537/article/details/81143290