java去除list中的重复值
Set 的add方法
add(E?e)?如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
01 public static List removeDuplicateWithOrder(List list) {
?
Java处理List中的重复值有两种方法,一种是经处理后得到新的无序list,另外一种则保留list原有的顺序。
方法一:使用Hastset的hashcode方法判断是否重复,数据不会重复,但顺序会变
- package?array;??
- import?java.util.ArrayList;?import?java.util.HashSet;?
- import?java.util.List;??
- public?class?ListOnlyValue_1?{?????public?static?void?main(String[]?args)?{?
- ????????List<String>?mylist?=?new?ArrayList<String>();?????????mylist.add("test");?
- ????????mylist.add("ab");?????????mylist.add("cd");?
- ????????mylist.add("ab");?????????mylist.add("sd");?
- ????????mylist.add("ab");?????????mylist.add("cd");?
- ????????mylist.add("xyz");?????????System.out.println("处理前的list:"?+?mylist);?
- ?????????????????mylist?=?removeDuplicate(mylist);?
- ????????System.out.println("处理后的list:"?+?mylist);?????}?
- ?????????public?static?List<String>?removeDuplicate(List<String>?list){?
- ????????HashSet<String>?hashSet?=?new?HashSet<String>(list);?????????list.clear();?
- ????????list.addAll(hashSet);??????????
- ????????return?list;?????}?
- }?
代码运行结果如下:
方法二:通过Hashset的add方法判断是否已经添加过相同的数据,如果已存在相同的数据则不添加,维持list中元素原有的顺序。
- 处理前的list:[test,?ab,?cd,?ab,?sd,?ab,?cd,?xyz]?处理后的list:[test,?sd,?ab,?xyz,?cd]?
- package?array;??
- import?java.util.ArrayList;?import?java.util.HashSet;?
- import?java.util.Iterator;?import?java.util.List;?
- ?public?class?ListOnlyValue_2?{?
- ????public?static?void?main(String[]?args)?{?????????List<String>?mylist?=?new?ArrayList<String>();?
- ????????mylist.add("test");?????????mylist.add("ab");?
- ????????mylist.add("cd");?????????mylist.add("ab");?
- ????????mylist.add("sd");?????????mylist.add("ab");?
- ????????mylist.add("cd");?????????mylist.add("xyz");?
- ????????System.out.println("处理前的list:"?+?mylist);??
- ????????mylist?=?removeDuplicateWithOrder(mylist);?????????System.out.println("处理后的list:"?+?mylist);?
- ????}??
- ????public?static?List<String>?removeDuplicateWithOrder(List<String>?list)?{?????????HashSet<String>?hashSet?=?new?HashSet<String>();?
- ????????List<String>?newlist?=?new?ArrayList<String>();??????????
- ????????for?(Iterator?iterator?=?list.iterator();?iterator.hasNext();)?{?????????????String?element?=?(String)?iterator.next();?
- ????????????if?(hashSet.add(element))?{?????????????????newlist.add(element);?
- ????????????}?????????}?
- ?????????????????list.clear();?
- ????????list.addAll(newlist);?????????return?list;?
- ????}?}?
代码运行结果如下:
- 处理前的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。