260 字
1 分钟
Java笔记-HashMap遍历
对HashMap的遍历选择,本质上是keySet与entrySet的选择。在JDK1.8源码中,HashMap包含了两种Iterator:EntryIterator与KeyIterator。
EntryIterator:
final class EntryIterator extends HashMap<K, V>.HashIterator implements Iterator<Map.Entry<K, V>> { EntryIterator() { super(); }
public final Map.Entry<K, V> next() { return nextNode(); } }KeyIterator:
final class KeyIterator extends HashMap<K, V>.HashIterator implements Iterator<K> { KeyIterator() { super(); }
public final K next() { return (K)nextNodekey; } }两种迭代器都继承于HashMap内部实现的一个抽象迭代器:HashIterator。具体细节可以自行查看JDK源码。
所以相应的,对于HashMap的遍历问题也就是选择KeyIterator还是EntryIterator。两者的区别显而易见,因此使用场景也较为分明。大多数情况下,我们都是对EntrySet进行遍历,无论是使用Iterator还是foreach进行遍历。因为访问键值对的时候,keySet是根据key再匹配value,而entry则已经把key-value都记录了。
当然,在只需要遍历key的场景下,keySet遍历会节省资源。
其实HashMap源码还有很多可以探讨的东西,有机会做个整理。
文章评论
欢迎为这篇文章留言。评论审核后会公开显示。
最近评论
正在加载留言…