Java Set的五种遍历方式
摘要:介绍Java遍历Set的五种方式,并分析哪中方式效率高,建议使用增强for循环变量。
Set 和 List 遍历方式基本一致,本文介绍Set的遍历方式,并比较那种方法执行效率最高。
1、迭代器方法
/**
/**
* 1 iterator
* 迭代器
*
* @param set
*/
public static void iteratorTest(Set<Integer> set) {
System.out.println("1 iterator 遍历方法");
long start = System.currentTimeMillis();
set.forEach(item -> {
// System.out.println(item);
});
System.out.println("耗时 time=\t" + (System.currentTimeMillis() - start));
StringBuilder sb = new StringBuilder(set.size());
for (Iterator<Integer> iterator = set.iterator(); iterator.hasNext(); ) {
sb = sb.append(iterator.next()).append(",");
}
System.out.println(sb.length());
/**
* while 循环写法
*/
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
iterator.next();
}
}
该方法用到了Iterator迭代器,略显繁琐,请考虑使用增强for遍历的方法。
2、增强for遍历
/**
* 2 增强for循环
*
* @param set
*/
public static void forTest(Set<Integer> set) {
System.out.println("2 增强for循环");
long start = System.currentTimeMillis();
// StringBuilder sb = new StringBuilder(set.size());
for (int item : set) {
// sb = sb.append(item).append(",");
}
// System.out.println(sb);
System.out.println("耗时 time=\t" + (System.currentTimeMillis() - start));
}
温馨提示:在对set集合成进行遍历的时候,请勿同时执行修改操作,比如删除,这样会导致程序崩溃。
forEach方法
set.forEach 自java 8 才支持。forEach 效率最低,不推荐!
/**
* 3 forEach 遍历方式
* forEach 最慢不推荐 java8 lambda
* 注意:在对set集合成进行遍历的时候不能同时进行修改操作,比如删除,这样会导致崩溃。
*
* @param set
*/
public static void forEachTest(Set<Integer> set) {
System.out.println("3 forEach 遍历方式");
long start = System.currentTimeMillis();
set.forEach(item -> {
// System.out.println(item);
});
System.out.println("耗时 time=\t" + (System.currentTimeMillis() - start));
}
stream.forEach方法
set.stream().forEach也是在java 8 才支持。
/**
* 4 stream forEach
* stream foreach java8 特有
*
* @param set
*/
public static void streamForEachTest(Set<Integer> set) {
System.out.println("4 stream forEach");
long start = System.currentTimeMillis();
set.stream().forEach(item -> {
// System.out.println(item);
});
System.out.println("耗时 time=\t" + (System.currentTimeMillis() - start));
}
耗时和增强for差不多。
5 forEachRemaining方法
此方法也是在java 8 才支持,主要用于继续输出集合中剩余的元素。这里用于遍历全部元素:
/**
* 5 forEachRemaining
*
* @param set
*/
public static void forRemainingTest(Set<Integer> set) {
System.out.println("5 forEachRemaining");
int i = 0;
long start = System.currentTimeMillis();
Iterator<Integer> iterator = set.iterator();
// set.iterator().forEachRemaining(value -> System.out.print(value + " "));
iterator.forEachRemaining(
new Consumer<Integer>() {
@Override
public void accept(Integer value) {
// System.out.println(value);
}
}
);
System.out.println("耗时 time=\t" + (System.currentTimeMillis() - start));
}
案例分析
使用如下main函数,调用如上几种方法,以分析各个方法执行效率:
public static void main(String[] args) {
int n = 1000000;
Set<Integer> set = new HashSet<>(n);
for (int i = 0; i < n; i++) {
set.add(i);
}
iteratorTest(set);
forTest(set);
forEachTest(set);
streamForEachTest(set);
forRemainingTest(set);
}
执行结果如下:
1 iterator 遍历方法
耗时 time= 130
6888890
2 增强for循环
耗时 time= 9
3 forEach 遍历方式
耗时 time= 15
4 stream forEach
耗时 time= 12
5 forEachRemaining
耗时 time= 16
Process finished with exit code 0
由执行结果可知,增强for循环效率最高。
Java Set的五种遍历方式的更多相关文章
- iOS开发中数组常用的五种遍历方式
随着iOS的不断发展,apple也不断推出性能更高的数组遍历方式,下面将对熟悉的五种遍历方式进行列举. 首先定义一个数组,并获取数组长度 NSArray *array=@[",]; NSIn ...
- java Map的四种遍历方式
1.这是最常见的并且在大多数情况下也是最可取的遍历方式,在键值都需要时使用. Map<Integer, Integer> map = new HashMap<Integer, Int ...
- java list 的 四种遍历方式
在java中遍历一个list对象的方法主要有以下四种: 1. For Loop —— 普通for循环 2. Advanced For Loop —— 高级for循环 3. Iterator Loop ...
- List集合五种遍历方式
一.使用Iterator接口遍历 二.普通for循环遍历 三.增强for循环遍历 四.List集合自带迭代器 五.Lambda(JDK8新增特性) //使用多态方式创建对象 List<Strin ...
- java集合的三种遍历方式
import java.util.ArrayList; import java.util.Collection;import java.util.Iterator;public class Home ...
- java集合四种遍历方式
package conection; import java.util.Iterator;import java.util.LinkedList;import java.util.List; publ ...
- Java中List集合的三种遍历方式(全网最详)
List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...
- 二叉树及其三种遍历方式的实现(基于Java)
二叉树概念: 二叉树是每个节点的度均不超过2的有序树,因此二叉树中每个节点的孩子只能是0,1或者2个,并且每个孩子都有左右之分. 位于左边的孩子称为左孩子,位于右边的孩子成为右孩子:以左孩子为根节点的 ...
- Java中Map的4种遍历方式
第一种方式:这是平常用的最多也最可取的一种遍历方式. for (Map.Entry<String, Object> entry : map.entrySet()) { System.out ...
- 基于Java的二叉树的三种遍历方式的递归与非递归实现
二叉树的遍历方式包括前序遍历.中序遍历和后序遍历,其实现方式包括递归实现和非递归实现. 前序遍历:根节点 | 左子树 | 右子树 中序遍历:左子树 | 根节点 | 右子树 后序遍历:左子树 | 右子树 ...
随机推荐
- RVV1.0指令中关于_m系列函数的使用方法,即掩码mask的转换使用
在RVV1.0指令函数的使用中,遇到了mask加载不匹配问题 uint8_t mask_data[] = {15, 0, 0, 0, 0, 0, 0, 0}; vbool8_t mask = vlm_ ...
- HarmonyOS SDK让小红书鸿蒙用户尽享原生相机的拍摄之美
小红书是深受年轻人喜爱的生活社交类社区平台,越来越多的人在小红书上分享旅行.日常.心情.近日,不少使用鸿蒙原生版小红书的细心用户已经发现,直接使用小红书拍摄照片与自己使用原相机拍摄有一样清晰美观的呈现 ...
- Surpac 安装
修改config文件 share 文件进行整体替换 数字地质 环境配置问题总结 *http 报错! 块体生成数据暂停,点击生成验收量提交,报错生成失败!!! 解决方案:重新打开块体
- Selenium 测试介绍
本文会从以下下几个方面介绍Selenium,相信大家阅读后会对Selenium有一个全新的认识. 为什么是Selenium 初探Selenium Selenium组成 Selenium ...
- ModuleNotFoundError: No module named '_ctypes' when Python3
前言 运行 python 报错:ModuleNotFoundError: No module named '_ctypes' when using Value from module multipro ...
- MySQL 中 DATETIME 和 TIMESTAMP 时间类型的区别及使用场景
MySQL的日期类型简介 在 MySQL 中有两种存储时间的数据类型 DATETIME 和 TIMESTAMP,它们在数据库实际应用中,各有各的优势和劣势. 一. DATETIME 和 TIMESTA ...
- jquery简单的上传图片预览
html <div id="bcd"></div> <input type="file" id="abc"&g ...
- Delphi Inputbox 输入时显示‘*’号
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- 第一次记录自己的java学习日常,之前都是看其他博主的java知识,现在该自己记录一下了。
对知识做总结 在学校呢,走过了非常多的坑,参加了一些比赛,但是也没有学到什么(含金量高的比赛可以参加,但是需参加之前先沉淀好自己的技术,不要报名了才去准备,得在准备中去报名),学校教的知识都是理论化, ...
- JAVA---在idea上实现简易的学生管理系统
登录需求 代码实现 APP package ITswj.test4_学生管理系统; import java.util.ArrayList; import java.util.Random; impor ...