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
  • 相关阅读:
    qt中文乱码问题
    【Qt开发】QThread 实用技巧、误区----但文档中没有提到
    TCP/UDP网络性能测试工具
    wireshark怎么抓包、wireshark抓包详细图文教程
    INDEX--从数据存放的角度看索引2
    杂谈--从基数评估来看问题1
    INDEX--从数据存放的角度看索引
    疑难杂症--为数据库主文件所在磁盘保留一定量磁盘空间
    统计--VARCHAR与NVARCHAR在统计预估上的区别
    杂谈--SQL SERVER版本
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959660.html
Copyright © 2011-2022 走看看