raymondwang1314 发表于 2013-2-3 13:37:21

java list 去重

由于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)) {                list.add(a);            }      }      return (String[])list.toArray(new String);    }      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);      }    }    }
页: [1]
查看完整版本: java list 去重