这个简短的教程讲述了如何存储唯一的对象以避免java列表中的重复?
在实时场景中,你会遇到在列表中出现重复对象的情况。
没有java集合的List实现来解决这个问题。
在集合中,List允许重复的值并保持插入的顺序,而Set不允许重复,不保持顺序。
为了实现这一点,我们可以通过多种方式来实现。
apache common-collection API提供了org.apache.commons.collections4.list.SetUniqueList 类,该类包含SetUniqueList ,用于从数组列表中移除重复的值,并返回没有重复的新列表。
import java.util.*;
import org.apache.commons.collections4.list.SetUniqueList;
public class Main {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("one");
System.out.println(list);
List result = SetUniqueList.setUniqueList(list);
System.out.println(result);
}
}
使用LinkedHashSet
LinkedHashSet 是Set的实现,它不允许重复,并保持插入的顺序。
以下是一系列的步骤
- 创建一个有重复值的ArrayList
- 接下来,创建LinkedHashSet对象,将列表传递给构造函数
- 返回没有重复的结果
import java.util.*;
public class Main {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("one");
System.out.println(list);
LinkedHashSet result = new LinkedHashSet<>(list);
System.out.println(result);
}
}
输出
[one, two, three, four, one]
[one, two, three, four]
Java8引入了流API来处理集合API。它有distinct() 方法,删除重复的值,最后使用collect 参数返回列表。
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("one");
System.out.println(list);
List result = list.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(result);
}
}
- 我们可以通过扩展List实现和实现Set接口来编写我们自己的set和list实现。
- 你可以不考虑实现List,因为Set已经实现了。你可以考虑扩展ArrayList,因为它不是最终的。
- 为此,你需要覆盖Add方法和hashcode方法,以实现无重复和无顺序。
结语
总而言之,你可以用LinkedHashSet,SetUniqueList 和Java8流distinct 方法来删除重复的元素。