Java 中 Set 的4中遍历方式
Set 和 List 遍历方式基本一致,Set 没有for的遍历方式
主测试方法
@Test
public void test(){
Set<Integer> set = new HashSet<>();
int n = 1000_0000;
for (int i = 0; i < n; i++) {
set.add(i);
}
System.out.println("======== 1 iterator ==========");
iteratorTest(set);
System.out.println("======== 2 增强for ==========");
forBoostTest(set);
System.out.println("======== 3 forEach 最耗时 java8 ==========");
forEachTest(set);
System.out.println("======== 4 stream forEach 比较耗时和增强for差不多 java8 ==========");
streamForEachTest(set);
}
测试结果
======== 1 iterator ==========
set.iterator() for time= 68
set.iterator() while time= 66
======== 2 增强for ==========
set.for Boost time= 75
======== 3 forEach 最耗时 java8 ==========
set.forEach time= 118
======== 4 stream forEach 比较耗时和增强for差不多 java8 ==========
set.stream().forEach() time= 71
1、迭代器方法
/**
* 1 iterator
* 迭代器
* @param set
*/
public static void iteratorTest(Set<Integer> set) {
long before = System.currentTimeMillis();
for (Iterator<Integer> iterator = set.iterator(); iterator.hasNext(); ) {
iterator.next();
}
long after = System.currentTimeMillis();
System.out.println("set.iterator() for time=\t" + (after - before));
before = System.currentTimeMillis();
/**
* while 循环写法
*/
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
iterator.next();
}
after = System.currentTimeMillis();
System.out.println("set.iterator() while time=\t" + (after - before));
}
2、增强for
/**
* 2
* 增强for
* @param set
*/
public static void forBoostTest(Set<Integer> set) {
long before = System.currentTimeMillis();
for (int item : set) {
// System.out.println(item);
}
long after = System.currentTimeMillis();
System.out.println("set.for Boost time=\t" + (after - before));
}
3、set.forEach 注意:java8 才支持
/**
* 3 foreach
* foreach 最慢不推荐 java8 lambda
* @param set
*/
public static void forEachTest(Set<Integer> set) {
long before = System.currentTimeMillis();
set.forEach(item -> {
// System.out.println(item);
});
long after = System.currentTimeMillis();
System.out.println("set.forEach time=\t" + (after - before));
}
4、set.stream().forEach 注意:java8 才支持
/**
* 4 stream foreach
* stream foreach java8 特有
* @param set
*/
public static void streamForEachTest(Set<Integer> set) {
long before = System.currentTimeMillis();
set.stream().forEach(item -> {
// System.out.println(item);
});
long after = System.currentTimeMillis();
System.out.println("set.stream().forEach() time=\t" + (after - before));
}
作者:sxhxh
出处:https://www.cnblogs.com/sxhxh/p/16756096.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!