利用 Hashtable(或 HashMap)鍵的唯一性,將數組元素作為鍵放入,最後取出值集合即可得到去重後的數組。
package org.eline.core.web.support;
import java.util.Hashtable;
public class ObjectFilter {
/**
* 過濾數組中重複元素
* @param arr 待過濾數組
* @return 去重後的新數組
*/
public Object[] filter(Object[] arr) {
Hashtable<Object, Object> table = new Hashtable<>();
for (Object o : arr) {
table.put(o, o); // 鍵值相同,自動去重
}
return table.values().toArray();
}
public static void main(String[] args) {
ObjectFilter filter = new ObjectFilter();
// 字符串測試
String[] strArr = {"13111", "13112", "13111"};
Object[] res1 = filter.filter(strArr);
System.out.println("去重後長度:" + res1.length);
for (Object o : res1) System.out.println(o);
// 整數測試
Integer[] intArr = {1, 3, 5, 7, 1, 2, 4, 5};
Object[] res2 = filter.filter(intArr);
for (Object o : res2) System.out.println(o);
}
}
HashSet 或 LinkedHashSet(保持順序),代碼更簡潔:public static <T> T[] distinct(T[] arr) {
return new ArrayList<>(new LinkedHashSet<>(Arrays.asList(arr))).toArray((T[]) Array.newInstance(arr.getClass().getComponentType(), 0));
}Arrays.stream(arr).distinct().toArray()。本文展示了基於 Hashtable 的經典去重寫法,並給出現代 Java 更優雅的替代方案,開發者可根據項目 JDK 版本選擇。