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 ...
随机推荐
- python 列表对象的增减
- 公司安装mariaDB-5.5.52和Jdk 7
转自:http://www.cnblogs.com/kgdxpr/p/3209009.html vi /etc/yum.repos.d/MariaDB.repo 加入下面内容 [mariabd]nam ...
- oracle函数 ASCII(x1)
[功能]:返回字符表达式最左端字符的ASCII 码值. [参数]:x1,字符表达式 [返回]:数值型 [示例] SQL> select ascii('A') A,ascii('a') a,asc ...
- 开发板ping通虚拟机与主机
刚因为虚拟机与主机没法互相ping通的事情,奋战到将近凌晨一点.现在把这个过程总结一下,以方便后加入该行业的广大IT精英. VMWare提供了三种工作模式:bridged(桥接模式).NAT(网络地址 ...
- Android ListView显示底部的分割线
有些时候,我们会提出这样的需求,希望ListView显示底部(顶部)的分割线,这样做,会使得UI效果更加精致,如下图所示: 如果搜索资料,大家会搜到一堆相关的方法,最多的莫过于设置listview的f ...
- mysql数据库之表和库
SQL:语句主要用于存储数据,查询数据,更新数据和管理关系数据库系统SQL语言有IBM开发,sql语言分为中类型: 1.DDL语句 数据库定义语句:数据库,表,视图,索引,存储过程,例如create, ...
- 第三期 行为规划——4.形式化FSM
让我们考虑一个简单的自动售货机,其中一切花费20美分.假设这台自动售货机只需要镍和硬币,但没有更大或更小. 然后,我们可以模拟状态这台自动售货机以已存入的金额为准.起始状态将为零美分.有两种可能发生. ...
- 2018-9-28-WPF-自定义-TextBoxView-的-Margin-大小
title author date CreateTime categories WPF 自定义 TextBoxView 的 Margin 大小 lindexi 2018-09-28 17:16:17 ...
- 2014年NOIP普及组复赛题解
题目涉及算法: 珠心算测验:枚举: 比例简化:枚举: 螺旋矩阵:模拟: 子矩阵:状态压缩/枚举/动态规划 珠心算测验 题目链接:https://www.luogu.org/problem/P2141 ...
- Python--day40--threading模块
import time from threading import Thread class MyThread(Thread): def __init__(self,arg): super().__i ...