读书人

java除了list中的重复值

发布时间: 2012-09-15 19:09:29 作者: rapoo

java去除list中的重复值

Set 的add方法

add(E?e)?如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。

01 public static List removeDuplicateWithOrder(List list) {

?

Java处理List中的重复值有两种方法,一种是经处理后得到新的无序list,另外一种则保留list原有的顺序。

方法一:使用Hastset的hashcode方法判断是否重复,数据不会重复,但顺序会变
  1. package?array;??
  2. import?java.util.ArrayList;?import?java.util.HashSet;?
  3. import?java.util.List;??
  4. public?class?ListOnlyValue_1?{?????public?static?void?main(String[]?args)?{?
  5. ????????List<String>?mylist?=?new?ArrayList<String>();?????????mylist.add("test");?
  6. ????????mylist.add("ab");?????????mylist.add("cd");?
  7. ????????mylist.add("ab");?????????mylist.add("sd");?
  8. ????????mylist.add("ab");?????????mylist.add("cd");?
  9. ????????mylist.add("xyz");?????????System.out.println("处理前的list:"?+?mylist);?
  10. ?????????????????mylist?=?removeDuplicate(mylist);?
  11. ????????System.out.println("处理后的list:"?+?mylist);?????}?
  12. ?????????public?static?List<String>?removeDuplicate(List<String>?list){?
  13. ????????HashSet<String>?hashSet?=?new?HashSet<String>(list);?????????list.clear();?
  14. ????????list.addAll(hashSet);??????????
  15. ????????return?list;?????}?
  16. }?

代码运行结果如下:

  1. 处理前的list:[test,?ab,?cd,?ab,?sd,?ab,?cd,?xyz]?处理后的list:[test,?sd,?ab,?xyz,?cd]?
方法二:通过Hashset的add方法判断是否已经添加过相同的数据,如果已存在相同的数据则不添加,维持list中元素原有的顺序。
  1. package?array;??
  2. import?java.util.ArrayList;?import?java.util.HashSet;?
  3. import?java.util.Iterator;?import?java.util.List;?
  4. ?public?class?ListOnlyValue_2?{?
  5. ????public?static?void?main(String[]?args)?{?????????List<String>?mylist?=?new?ArrayList<String>();?
  6. ????????mylist.add("test");?????????mylist.add("ab");?
  7. ????????mylist.add("cd");?????????mylist.add("ab");?
  8. ????????mylist.add("sd");?????????mylist.add("ab");?
  9. ????????mylist.add("cd");?????????mylist.add("xyz");?
  10. ????????System.out.println("处理前的list:"?+?mylist);??
  11. ????????mylist?=?removeDuplicateWithOrder(mylist);?????????System.out.println("处理后的list:"?+?mylist);?
  12. ????}??
  13. ????public?static?List<String>?removeDuplicateWithOrder(List<String>?list)?{?????????HashSet<String>?hashSet?=?new?HashSet<String>();?
  14. ????????List<String>?newlist?=?new?ArrayList<String>();??????????
  15. ????????for?(Iterator?iterator?=?list.iterator();?iterator.hasNext();)?{?????????????String?element?=?(String)?iterator.next();?
  16. ????????????if?(hashSet.add(element))?{?????????????????newlist.add(element);?
  17. ????????????}?????????}?
  18. ?????????????????list.clear();?
  19. ????????list.addAll(newlist);?????????return?list;?
  20. ????}?}?

代码运行结果如下:

  1. 处理前的list:[test,?ab,?cd,?ab,?sd,?ab,?cd,?xyz]?处理后的list:[test,?ab,?cd,?sd,?xyz]?

该方法运用了HashSet的add属性,若HashSet中已存在某元素,add方法是不会再将此元素add到HashSet中的,正是运用此原理,当HashSet能add一个元素时,newlist也跟着add一个元素,这样就得到一个维持原有顺序的没有重复值的新list。

读书人网 >编程

热点推荐