java List 去除重复元素的五种方式
集合
List<String> list = new ArrayList<>();
list.add("33");
list.add("33");
list.add("66");
list.add("33");
list.add("11");
list.add("66");
list.add("66");
list.add("88");
list.add("88");
1.双重for i 循环 使用 remove 方法删除掉重复的元素
// 这里内层循环是从后面往前面删除,所以不用里面不用 j-- 操作
for(int i = 0; i < list.size()-1; i++) {
for( int j = list.size()-1; j > i;j--) {
if(list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
System.out.println(list);
// 这里内层循环是从前往后删除,由于remove方法涉及到内存移动,
// 在删除一个元素后后面一个元素的下标会往前移,所以这里需要 j-- 将取值也前移一位
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i) == list.get(j)) {
list.remove(j);
j--;
}
}
}
System.out.println(list);
2.使用HashSet 去除重复,但该方法不能保证集合元素原本的顺序
Set h = new HashSet(list);
list.clear();
list.addAll(h);
System.out.println(list);
3.使用HashSet来判断元素是否重复,然后将不重复的元素添加到List中
Set<String> s = new HashSet<>();
List<String> l = new ArrayList<>();
for (String str : list) {
if (s.add(str)) {
l.add(str);
}
}
list.clear();
list.addAll(l);
System.out.println(list);
4.使用contains方法来判断元素是否重复,然后将不重复的元素添加到List中
List<String> l = new ArrayList<>();
for (String str : list) {
if (!l.contains(str)) {
l.add(str);
}
}
list.clear();
list.addAll(l);
System.out.println(list);
5.Java8中 list.stream().distinct() 去除重复元素
补充一下,今天在项目中用这种方法的时候在 list.clear(); 的位置报错
java.lang.UnsupportedOperationException
百度了一下,都是说 Arrays 的 ArrayList 不支持 clear() 和 addAll() 方法导致的,
我没有去深究我这里是为啥报错了的,大佬们有兴趣的话可以评论下。
我项目里面,直接用 streamList 这个 List 了,效果一样
这里做个笔记记录下
List<String> streamList = list.stream().distinct().collect(Collectors.toList());
list.clear();
list.addAll(streamList );
System.out.println(list);