zoukankan      html  css  js  c++  java
  • 技巧:ArrayList删除元素时, 各种方法效率对比

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    
    
    public class ArrayListTest {
    
    	/** 
         * @param args 
         */  
        public static void main(String[] args) {  
               
      
             String str = "dai";  
               
             long start = System.currentTimeMillis();  
               
             List<String> list = initData();  
               
             list = removeListElementD(list,str);  
               
             System.out.println("复制删使用时间:"+(System.currentTimeMillis()-start)+"Ms  list的长度:"+list.size());  
               
             start = System.currentTimeMillis();  
               
             list = initData();  
               
             list = removeListElementAfter(list,str);  
               
             System.out.println("后删使用时间:"+(System.currentTimeMillis()-start)+"Ms  list的长度:"+list.size());  
               
             start = System.currentTimeMillis();  
               
             list = initData();  
               
             list = removeListElementBefore(list,str);  
               
             System.out.println("前删使用时间:"+(System.currentTimeMillis()-start)+"Ms  list的长度:"+list.size());  
             
             start = System.currentTimeMillis();  
             
             list = initData();  
               
             list = removeListElementIterator(list,str);  
               
             System.out.println("迭代删使用时间:"+(System.currentTimeMillis()-start)+"Ms  list的长度:"+list.size());  
               
               
        }  
          
        private static List<String> initData() {    
             List<String> list = new ArrayList<String>();  
             list.add("dai");  
             list.add("dai");  
             list.add("dai");  
             list.add("dai");  
             list.add("changya");  
             list.add("dai");  
             list.add("dai");  
             list.add("dai");  
             list.add("ya");  
               
             for(int i=0;i<10000;i++){  
                 list.add("changya");  
                 list.add("dai");  
                 list.add("dai");  
                 list.add("dai");  
                 list.add("ya");  
             }  
               
             return list;  
        }    
          
        /**   
         * 删除Arraylist中值为"dai"的元素   
         *    
         * 这种方式:   
         *    
         * 不管值为"dai"的元素在Arraylist中是否连续,都可以把值为"dai"的元素全部删除   
         *  
         */   
        public static List<String> removeListElementD(List<String> list,String str) {    
             List<String> tempList = new ArrayList<String>(list.size());  
             for(int i=0;i<list.size();i++){  
                 if(!list.get(i).equals(str)){  
                     tempList.add(list.get(i));  
                 }  
             }  
             return tempList;  
        }   
          
        /**   
         * 删除Arraylist中值为"dai"的元素   
         *    
         * 这种方式:   
         *    
         * 不管值为"dai"的元素在Arraylist中是否连续,都可以把值为"dai"的元素全部删除   
         */   
        public static List<String> removeListElementAfter(List<String> list,String str) {   
            for(int i=list.size()-1;i>=0;i--) {    
                if(str.equals(list.get(i))) {    
                    list.remove(i);    
                    ++i;//删除了元素,迭代的下标也跟着改变    
                }    
            }    
              
            return list;  
        }   
          
        /**   
         * 删除Arraylist中值为"dai"的元素   
         *    
         * 这种方式:   
         *    
         * 不管值为"dai"的元素在Arraylist中是否连续,都可以把值为"dai"的元素全部删除   
         */   
        public static List<String> removeListElementBefore(List<String> list,String str) {   
            for(int i=0;i<list.size();i++) {    
                if(str.equals(list.get(i))) {    
                    list.remove(i);    
                    --i;//删除了元素,迭代的下标也跟着改变    
                }    
            }    
            return list;  
        }   
        
        /**   
         * 删除Arraylist中值为"dai"的元素   
         *    
         * 这种方式:   
         *    
         * 不管值为"dai"的元素在Arraylist中是否连续,都可以把值为"dai"的元素全部删除   
         */   
        public static List<String> removeListElementIterator(List<String> list,String str) {   
        	for (Iterator iterator = list.iterator(); iterator.hasNext();) {
    			String string = (String) iterator.next();
    			if(str.equals(string)) {    
    				iterator.remove();
                }  
    		}
            return list;  
        }   
          
          
      
    	
    
    }
    
    复制删使用时间:21Ms  list的长度:20002
    后删使用时间:151Ms  list的长度:20002
    前删使用时间:363Ms  list的长度:20002
    迭代删使用时间:319Ms  list的长度:20002
  • 相关阅读:
    “零接触”新需求,如何快速实现体温检测数字化管控方案?
    AR公共安全及应急指挥中的应用 | TVP思享
    当模板方法遇到了委托函数,你的代码又可以精简了
    为什么要用内插字符串代替string.format
    如何让多个不同类型的后端网站用一个nginx进行反向代理实际场景分析
    8天入门docker系列 —— 第八天 让程序跑在swarm集群上
    8天入门docker系列 —— 第七天 让你的container实现跨主机访问
    8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry
    8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
    8天入门docker系列 —— 第四天 使用aspnetcore小案例熟悉端口映射和挂载目录
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959660.html
Copyright © 2011-2022 走看看