注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

陈钟鸣的博客

独立之精神,自由之思想.

 
 
 

日志

 
 

排除List中相同项的算法比较  

2008-07-31 12:30:32|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Random;


public class HashtableSample {
    
    public static void main(String[] args) {
        
        System.out.println("start");
        List list = makeAList();
        List tmpList = new ArrayList();
        tmpList = distinct1(list);
        tmpList = distinct2(list);
    }
    
    //造一个1万行的List,其元素为具有三个键值对的MAP,我们将排ID,ID2相同的行.即以ID,ID2作为主键...
    public static List makeAList(){
        
        List list = new ArrayList();
        for(int i = 0;i<10000;i++){
            Map map = new HashMap();
            map.put("ID",  (i%9990)+"");
            map.put("ID2",new Random(10).nextLong()+"");
            map.put("CNAME", "emp"+i);
            list.add(map);
        }
        
        
        Map map = new HashMap();
        map.put("ID", null);
        map.put("ID2", null);
        map.put("CNAME", "NULL_1");
        list.add(map);
        
        map.put("ID", null);
        map.put("ID2", null);
        map.put("CNAME", "NULL_2");
        list.add(map);
        
        
        return list;
    }
    //借助Hashtable
    public static List distinct1(List list){
        long mark = System.currentTimeMillis();
        List tmpList = new ArrayList();
        Hashtable tmpHT = new Hashtable();
        
        for(int i = 0;i<list.size();i++){
            Map map = (Map)list.get(i);
            String key1 = (String)map.get("ID");
            String key2 = (String)map.get("ID2");
            
            if(key1 == null){
                tmpList.add(map);
            }
            else{
                Map keyMap = new HashMap();
                keyMap.put("ID",key1);
                keyMap.put("ID2",key2);
                if(!tmpHT.containsKey(keyMap)){
                    tmpHT.put(keyMap, map);
                }
            }
        }
        tmpList.addAll(tmpHT.values());
        System.out.println("way1 spend time(ms):"+(System.currentTimeMillis() - mark));
        return tmpList;
        
    }
    
    //嵌套循环
    public static List distinct2(List list){
        
        long mark = System.currentTimeMillis();
        List tmpList = new ArrayList();
        
        boolean isExists = false;
        for(int i = 0;i<list.size();i++){
            Map map = (Map)list.get(i);
            String key1 = (String)map.get("ID");
            String key2 = (String)map.get("ID2");
            isExists = false;
            if(key1 == null){
                tmpList.add(map);
            }
            else{
                for(int j = 0;j<tmpList.size();j++){
                    Map tmpMap = (Map)tmpList.get(j);
                    String tmpKey1 = (String)tmpMap.get("ID");
                    String tmpKey2 = (String)tmpMap.get("ID2");
                    if(key1.equals(tmpKey1)&&key2.equals(tmpKey2)){
                        isExists = true;
                        break;
                    }
                }
                if(!isExists){
                    tmpList.add(map);
                }
            }
        }
        System.out.println("way2 spend time(ms):"+(System.currentTimeMillis() - mark));
        return tmpList;
    }

}

*用第一种方法会比第二种快近300倍...    //重复值越少,效果越明显.
  评论这张
 
阅读(95)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017