六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 36|回复: 0

java list 去重

[复制链接]

升级  31.33%

27

主题

27

主题

27

主题

秀才

Rank: 2

积分
97
 楼主| 发表于 2013-2-3 13:37:21 | 显示全部楼层 |阅读模式
由于list是有顺序的,允许重复记录的,但是实际应用中很多时候要求我们必须去掉重复,特别是一些javaBean,采用循环比较,这样要运算list.size()*list.size()次,巧妙的利用list.contain(Object obj),和obj.equals(Object obj);方法可以使去重运算较少到list.size()次

原理是这样的:

list.contains(o),系统会对list中的每个元素e调用o.equals(e),方法,加入list中有n个元素,那么会调用n次o.equals(e),只要有一次o.equals(e)返回了true,那么list.contains(o)返回true,否则返回false。

很显然,只要我们重写javaBean的equals(Object obj)方法就可以实现简单的利用contains()方法返回true,false来确定是否去掉;

还有一种方法是利用list.sort的排序,实现一个Comparator,对list进行排序,后根据排序结果遍历,让javaBean和上一个javaBean进行比较,相同的弃掉而实现去重

不知道我说的清不清楚,下面贴出一个contains(),equals(),排重的例子:

List<order> list = new ArrayList<Order>();        if(ListA!=null){                    Iterator it= ListA.iterator();                    while(it.hasNext()){                        list.add((Order)it.next());                    }                 }        if(ListB!=null){                    Iterator it= ListB.iterator();                    while(it.hasNext()){                      Order o=(Order)it.next();                      if(!list.contains(o))                          list.add(o);                    }                 }public boolean equals(Object obj) {             if (this == obj)                 return true;             if (obj == null)                 return false;             if (getClass() != obj.getClass())                 return false;             final Order other = (Order) obj;              if(this.getOrderid()!=other.getOrderid())                 return false;             return true;        }import java.util.Arrays;import java.util.List;import java.util.LinkedList;public class tests {        public static List printMap1(String[] s) {        List<String> list = new LinkedList<String>();        List<String> list2 = Arrays.asList(s);        list.addAll(list2);        return list;            }        public static String[] array_unique(String[] a) {        // array_unique        List<String> list = new LinkedList<String>();        for(int i = 0; i < a.length; i++) {            if(!list.contains(a[i])) {                list.add(a[i]);            }        }        return (String[])list.toArray(new String[list.size()]);    }        public static void main(String[] args) {        String[] ar = {"dd","cc","ee","ff","gg","cc","ee"};        String[] s = array_unique(ar);        for(String aa : s) {            System.out.println(aa);        }        System.out.println("--------------linkedList:");        List list3 = printMap1(ar);        for(Object o : list3) {            System.out.println(o);        }    }    }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表