ArrayList中删除null元素效率比较
package test; import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; public class TestList {
static final int size = 1000000; public static void main(String[] args) {
List<Integer> linkedList = new LinkedList<Integer>();
List<Integer> arrayList = new ArrayList<Integer>();
long startTime;
long endTime;
Iterator<Integer> iterator; //添加数据
for (int i = 0; i < size; i++) {
int value = (int) (Math.random() * 1000);
if (value == 0) {
linkedList.add(null);
} else {
linkedList.add(value);
}
}
arrayList.addAll(linkedList); //采用倒叙方法移除空元素
arrayList.clear();
arrayList.addAll(linkedList);
startTime = System.currentTimeMillis();
for (int i = arrayList.size() - 1; i >= 0; i--) {
if (arrayList.get(i) == null) {
arrayList.remove(i);
}
}
endTime = System.currentTimeMillis();
System.out.println("倒叙方法移除ArrayList中null 耗时" + (endTime - startTime) + "ms, 剩余数据" + arrayList.size() + "个"); arrayList.clear();
arrayList.addAll(linkedList);
int len = arrayList.size();
startTime = System.currentTimeMillis();
for (int i = 0; i < len; i++) {
if (arrayList.get(i) == null) {
arrayList.remove(i);
i--;
len--;
}
}
endTime = System.currentTimeMillis();
System.out.println("正序方法移除ArrayList中null 耗时" + (endTime - startTime) + "ms, 剩余数据" + arrayList.size() + "个"); arrayList.clear();
arrayList.addAll(linkedList);
startTime = System.currentTimeMillis();
arrayList.removeAll(Collections.singleton(null));
endTime = System.currentTimeMillis();
System.out.println("Collections方法移除ArrayList中null 耗时" + (endTime - startTime) + "ms, 剩余数据" + arrayList.size() + "个"); arrayList.clear();
arrayList.addAll(linkedList);
startTime = System.currentTimeMillis();
iterator = arrayList.iterator();
while (iterator.hasNext()) {
Integer valueInteger = iterator.next();
if (valueInteger == null) {
iterator.remove();
}
}
endTime = System.currentTimeMillis();
System.out.println("迭代器方法移除ArrayList中null 耗时" + (endTime - startTime) + "ms, 剩余数据" + arrayList.size() + "个"); startTime = System.currentTimeMillis();
iterator = linkedList.iterator();
while (iterator.hasNext()) {
Integer valueInteger = iterator.next();
if (valueInteger == null) {
iterator.remove();
}
}
endTime = System.currentTimeMillis();
System.out.println("迭代器方法移除LinkedList中null 耗时" + (endTime - startTime) + "ms, 剩余数据" + arrayList.size() + "个"); } }
结果(跟List中null元素个数有关):
倒叙方法移除ArrayList中null 耗时126ms, 剩余数据998946个
正序方法移除ArrayList中null 耗时122ms, 剩余数据998946个
Collections方法移除ArrayList中null 耗时13ms, 剩余数据998946个
迭代器方法移除ArrayList中null 耗时131ms, 剩余数据998946个
迭代器方法移除LinkedList中null 耗时12ms, 剩余数据998946个
ArrayList中删除null元素效率比较的更多相关文章
- Java删除ArrayList中的重复元素
Java删除ArrayList中的重复元素的2种方法 ArrayList是Java中最常用的集合类型之一.它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序.在编码时我们经常会遇到那种必 ...
- Java之——删除ArrayList中的反复元素的2种方法
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47414935 ArrayList是Java中最经常使用的集合类型之中的一个.它同意 ...
- 如何使用 Java 删除 ArrayList 中的重复元素
如何使用 Java 删除 ArrayList 中的重复元素 (How to Remove Duplicates from ArrayList in Java) Given an ArrayList w ...
- Java集合类ArrayList循环中删除特定元素
在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java"&g ...
- java 在循环中删除数组元素
在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...
- ES6数组中删除指定元素
知识点: ES6从数组中删除指定元素 findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. arr.splice(arr.findIndex(item => ...
- 正确在遍历中删除List元素
最近在写代码的时候遇到了遍历时删除List元素的问题,在此写一篇博客记录一下. 一般而言,遍历List元素有以下三种方式: 使用普通for循环遍历 使用增强型for循环遍历 使用iterator遍历 ...
- python中删除某个元素的3种方法
python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> st ...
- 如何python循环中删除字典元素
//下面这行就是在循环中遍历删除字典元素的方法! for i in list(dictheme2.keys()): if dictheme2[i]<self.countFortheme: dic ...
随机推荐
- ModuleNotFoundError: No module named 'tools.nnwrap' pytorch 安装
https://pytorch.org/get-started/locally/ pytorch 主页选择后安装
- Redis源码解析:04字典的遍历dictScan
dict.c中的dictScan函数,用来遍历字典,迭代其中的每个元素.该函数使用的算法非常精妙!!!所以必须记录一下. 遍历一个稳定的字典,当然不是什么难事,但Redis中的字典因为有rehash的 ...
- HDU3844 Mining Your Own Business
HDU3844 Mining Your Own Business 问题描述John Digger是一个大型illudium phosdex矿的所有者.该矿山由一系列隧道组成,这些隧道在各个大型交叉口相 ...
- H3C 局域网的不足
- hdu 4430 Yukari's Birthday (简单数学 + 二分)
Problem - 4430 题意是,给出蜡烛的数量,要求求出r和k,r是蜡烛的层数,k是每一层蜡烛数目的底数. 开始的时候,没有看清题目,其实中间的那根蜡烛是可放可不放的.假设放置中间的那根蜡烛,就 ...
- Unity5.6.4f1 配置WebGL教程
Unity 5.6.4f1 发布WebGL的配置教程 步骤一:先查看自带的Unity是否yi配置好WebGL的项,若无,则可遵循以下教程来设置 步骤二:下图是我已经设置好的,未设置好的状态是,有个Op ...
- jQuery 文档操作 - remove() 方法
移除所有 <p> 元素: 定义和用法 remove() 方法移除被选元素,包括所有文本和子节点. 该方法不会把匹配的元素从 jQuery 对象中删除,因而可以在将来再使用这些匹配的元素. ...
- Python--day64--找到作者关联的所有书籍对象、ORM多对多关联查询的原理
找到当前作者关联的所有书籍对象: ORM多对多关联查询的原理: 编辑作者:
- 递归求gcd(a,b)
int gcd(int a,int b) { ) return a; else return gcd(b,a%b); }
- 2018-8-3-WPF-读取硬件序列号
title author date CreateTime categories WPF 读取硬件序列号 lindexi 2018-8-3 11:8:2 +0800 2018-8-2 19:28:6 + ...