for循环遍历HashMap常用的有4种方式。
通过hashMap.keySet()遍历
keySet()方法返回HashMap中的key值的集合,然后通过get()方法传入key值,可以得到key对应的value值。示例代码:
for (Integer key : hashMap.keySet()) {
int value = hashMap.get(key);
}
通过hashMap.values()遍历
values()方法返回HashMap中的value值的集合。示例代码:
for (Integer v : hashMap.values()) {
int value = v;
}
通过hashMap.entrySet()遍历 entrySet()方法返回HashMap中的key-value键值对集合。key和value一一对应,都可以获取到。示例代码:
for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
int key = entry.getKey();
int value = entry.getValue();
}
通过Iterator遍历
以上3中遍历方式都可以获取结果集合的迭代器(Iterator),通过Iterator.next()方法遍历结果集.示例代码:
Iterator<Integer> integerIterator = hashMap.values().iterator();
while (integerIterator.hasNext()) {
int value = integerIterator.next();
}
package com.dashidan.profile;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 大屎蛋教程网-dashidan.com
* for循环中的效率优化
* Created by 大屎蛋 on 2018/5/22.
*/
public class Demo2 {
public static void main(String[] args) {
int count = 1000000;
/** 初始化HashMap*/
HashMap<Integer, Integer> hashMap = new HashMap<>();
long t0 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
hashMap.put(i, i);
}
/** 遍历Key获取Value*/
long t1 = System.currentTimeMillis();
for (Integer key : hashMap.keySet()) {
int value = hashMap.get(key);
}
/** 遍历value*/
long t2 = System.currentTimeMillis();
for (Integer v : hashMap.values()) {
int value = v;
}
long t3 = System.currentTimeMillis();
/** 遍历Entry*/
for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
int key = entry.getKey();
int value = entry.getValue();
}
long t4 = System.currentTimeMillis();
/** Iterator 遍历*/
Iterator<Integer> integerIterator = hashMap.values().iterator();
while (integerIterator.hasNext()) {
int value = integerIterator.next();
}
long t5 = System.currentTimeMillis();
System.out.println(t1 - t0);
System.out.println(t2 - t1);
System.out.println(t3 - t2);
System.out.println(t4 - t3);
System.out.println(t5 - t4);
}
}
总体说来,HashMap的put方法耗时会多余get方法。通过遍历keySet,然后再通过key获取value的方式效率最低。其余集中方式效率差不多。
结论:
如果只需要遍历value值,推荐采用遍历values()集合的方式。
如果遍历hashmap时,key和value都需要用到,推荐采用遍历entrySet的方式.
分享到:
相关推荐
遍历HashMap是常见的操作,本文将介绍六种不同的方法来实现这一功能。 1. **方式一:使用KeySet方法** KeySet方法返回HashMap中所有键的Set视图。由于Set接口实现了Iterable接口,我们可以使用for-each循环来遍历...
以下是如何使用`for`循环遍历ArrayList: ```java ArrayList<String> list = new ArrayList(); // 添加元素... for (int i = 0; i (); i++) { String element = list.get(i); // 处理元素... } ``` 然后是增强型...
- **foreach循环**:Java 5引入了增强的for循环(也称为foreach),可以直接遍历Map的键值对,例如:`for (Map.Entry, Value> entry : map.entrySet()) {...}` 4. **源代码解析**: - `put`操作:当插入新的键值...
遍历HashMap时,可以使用`keySet()`、`values()`或`entrySet()`方法获取相应的Set视图,再进行迭代。 在面试中,除了基本的遍历方式,还可能考察一些高级话题,如并发遍历(ConcurrentModificationException)、...
在Java中,for循环常用来遍历数组或集合,而HashMap是一种高效的数据结构,它以键值对的形式存储数据,允许我们通过键(key)快速查找对应的值(value)。这种组合可能在解决实际问题时,如数据处理、记录跟踪或状态...
最后,HashMap是键值对存储的集合,遍历HashMap需要注意,因为直接遍历可能会出现并发修改异常。一般有两种方式:一是通过keySet()获取键的集合并遍历,二是通过entrySet()获取键值对的集合进行遍历: ```java ...
对于大容量的Map,推荐使用第三种方式,即通过Map.entrySet的增强for循环遍历。这种方式避免了`get`方法的二次查询,从而提高了性能。尤其是当Map实现是哈希表,如HashMap,它会将key-value对存储为Entry对象,直接...
虽然不推荐,但也可以使用传统的for循环遍历`Map`。 ```java int size = map.size(); for (int i = 0; i ; i++) { Entry, Integer> entry = map.entrySet().toArray(new Entry[0])[i]; System.out.println(...
4. 遍历:`std::unordered_map`提供了迭代器进行遍历,可以使用`for`循环或范围基础循环遍历所有键值对。 在实际使用中,我们需要考虑的因素包括: - 哈希函数的选择和优化,以降低哈希冲突的概率。 - 键的类型应...
- 增强for循环遍历 - 迭代器遍历 - 列表迭代器(ListIterator)遍历,允许在遍历过程中修改集合 2. **Set集合** - **特点**:Set是无序的,不允许元素重复,没有索引。 - **子类**:HashSet和TreeSet - **...
3. **遍历机制**:支持迭代器(iterator)进行键值对的遍历,符合ES6的迭代协议,方便在for...of循环中使用。 4. **容量与负载因子**:库可能包含了调整容量和负载因子的选项,以平衡空间效率和查找速度。负载因子...
接下来,通过`do-while`循环遍历链表,调用`replacementTreeNode`方法将链表节点转换为`TreeNode`,并添加到红黑树中: ```java do { TreeNode,V> p = replacementTreeNode(e, null); if (tl == null) hd = p; ...
2. 利用JVM的循环优化,例如,使用增强型for循环(`for-each`)和迭代器。 3. 对于大数据处理,考虑使用Java 8的`Stream` API,尤其是并行流,以利用多核处理器的优势。 4. 如果可能,使用合适的数据结构,如哈希...
本主题主要关注的是`for`循环的性能优化,特别是针对双重`for`循环的情况。 标题“forEach.rar”可能暗示着我们将在Java 8及更高版本中探讨`forEach`方法,它是`Stream API`的一部分,它提供了一种声明式编程的方式...
在遍历List集合时,如果List实现了RandomAccess接口,使用for循环通常会比使用迭代器更高效。 #### 16. 对象实例化优化 频繁地实例化同一个类型的新对象会增加垃圾回收的负担,可以考虑使用对象池来优化。 #### 17...
- 对于List,可以使用迭代器(Iterator)或增强for循环遍历: ```java List<String> list = Arrays.asList("A", "B", "C"); // 使用迭代器 Iterator<String> iterator = list.iterator(); while (iterator....
7. **遍历HashMap**:通过`for`循环和`keys()`或`values()`函数遍历所有键或值。 8. **释放资源**:在不再使用HashMap时,记得调用`free()`函数释放内存。 HashMap在R中的应用广泛,特别是在大数据分析、统计建模...
- **集合遍历**:使用迭代器或for-each循环遍历集合中的元素。 - **集合输出**:将集合内容打印到控制台。 - **List循环移动元素**:在List中移动元素的位置。 - **遍历HashTable的键值**:使用keySet()方法获取...
- List支持for循环遍历元素,也支持通过迭代器遍历,而Set由于其元素无序的特点,只能使用迭代器遍历。 2. HashSet如何保证元素唯一性: - HashSet是基于HashMap实现的,它使用HashMap的key来存储Set中的元素。 ...
在Java中,可以通过while或for循环遍历ResultSet,将每条记录转化为实体对象,然后传递给视图层展示。在设计视图时,可以使用JSP或Thymeleaf等技术,将数据动态绑定到页面上。 在开发过程中,考虑到系统的安全性,...