zoukankan      html  css  js  c++  java
  • 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个
  • 相关阅读:
    初始线程(相关理论)
    python并发编程之多进程2-(数据共享及进程池和回调函数)
    python并发编程之多进程1--(互斥锁与进程间的通信)
    Cpython支持的进程与线程
    网络编程之进程理论简介
    python之网络socket编程
    Gray码 (格雷码) 【二进制】
    [BZOJ 2350] [Poi2011] Party 【Special】
    [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】
    [BZOJ 3209] 花神的数论题 【数位统计】
  • 原文地址:https://www.cnblogs.com/wushengwuxi/p/8649538.html
Copyright © 2011-2022 走看看