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 ...
随机推荐
- 自定义View系列教程06--详解View的Touch事件处理
深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...
- @topcoder - SRM577D1L3@ XorAndSum
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给出 N 个数,每次操作可以任意选择两个数,将其中一个替换为两个 ...
- iphone开发中调用系统打电话功能
iphone开发中调用打电话功能,一般有2种: 1.系统的打电话代码,不返回当前程序: Java代码 [[UIApplication sharedApplication] openURL:[NSURL ...
- Chrome接口请求一直是pending状态,但接口实际上是正常的
1.现象 个别机器突然出现Chrome访问我司产品异常,本该通过接口获取的数据没有呈现,之前都是好好的,而且其他机器同样用同版本Chrome访问正常. 出现问题的机器重装Chrome问题依然存在,直到 ...
- 强连通分量-----Kosaraju
芝士: 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connect ...
- P1112 区间连续段
题目描述 给你一个长度为n的数组 \(a_1, a_2, \dots a_n\) . 一开始这n个元素都为0. 然后有m次操作,每次操作有两种操作类型: update x y a:将区间 \([x,y ...
- Springboot-webscoket with sockjs
新建springboot maven工程,引入以下包 <dependency> <groupId>org.springframework.boot</groupId> ...
- python基础十一之迭代器和生成器
可迭代 内置方法中含有__iter__的数据类型都是可迭代的,只要是可迭代的就可以使用for循环,反之亦然. print(dir('')) # dir()函数可以获取当前数据类型的所有内置方法 返回值 ...
- H3C 示例:计算子网内可用地址数
- Python中&、^与and、or
导火索:给定两个列表,怎么找出他们相同的元素和不通的元素? list1 = [1, 2, 3, 4, 57, 8, 90] list2 = [2, 3, 4, 5, 6, 7, 8] lis = li ...