在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 中的重複元素,並且輸出的集合元素順序和插入順序一致。