工作学习笔记(八)去重校验
在Java中,“去重校验”通常用于确保数据集合(如数组、列表等)中的元素是唯一的。以下是几种常见的方式:
- 使用简单对象去重
- 原理:HashSet是基于哈希表实现的集合,它不允许存储重复的元素。当向HashSet中添加元素时,它会根据元素的哈希码(hashCode)来确定元素在内部存储结构中的位置,并且通过equals方法来判断是否为重复元素。
- 例如:
import java.util.HashSet; import java.util.Set; public class DuplicateCheckWithHashSet { public static void main(String[] args) { // 创建一个包含重复元素的整数数组 Integer[] numbers = {1, 2, 3, 2, 4, 3}; Set<Integer> numberSet = new HashSet<>(); for (Integer number : numbers) { numberSet.add(number); } System.out.println(numberSet); } }
在上述示例中,我们有一个整数数组 numbers ,其中包含了重复的元素。通过将数组中的元素逐个添加到 HashSet 中,最终 HashSet 中只会保留不重复的元素。当我们打印 numberSet 时,就可以得到去重后的元素集合。
- 使用TreeSet(用于排序和去重)
- 原理:TreeSet是基于红黑树实现的有序集合,它也不允许存储重复的元素。在添加元素时,会按照元素的自然顺序(如果元素实现了Comparable接口)或者通过自定义的比较器(Comparator)进行排序,并同时进行去重操作。
- 示例代码:
import java.util.TreeSet; import java.util.Set; public class DuplicateCheckWithTreeSet { public static void main(String[] args) { // 创建一个包含重复元素的字符串数组 String[] words = {"apple", "banana", "cherry", "banana", "date"}; Set<String> wordSet = new TreeSet<>(); for (String word : words) { wordSet.add(word); } System.out.println(wordSet); } }
这里有一个字符串数组 words ,将其中的元素添加到 TreeSet 中。 TreeSet 会对元素进行排序(按照字典序),并且去除重复的元素。最后打印出的 wordSet 是排好序且无重复元素的集合。
- 保持插入顺序并去重
- 原理:LinkedHashSet继承自HashSet,它在HashSet的基础上,通过维护一个双向链表来记录元素的插入顺序。在去重方面和HashSet一样,通过元素的哈希码和equals方法来判断重复。
- 示例:
import java.util.LinkedHashSet; import java.util.Set; public class DuplicateCheckWithLinkedHashSet { public static void main(String[] args) { // 创建一个包含重复元素的字符数组 Character[] characters = {'a', 'b', 'c', 'b', 'd', 'a'}; Set<Character> characterSet = new LinkedHashSet<>(); for (Character character : characters) { characterSet.add(character); } System.out.println(characterSet); } }
在这个示例中, LinkedHashSet 去除了字符数组 characters 中的重复元素,并且输出的集合元素顺序和插入顺序一致。