diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0c93caad4..96ff2f7cb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@
* 【core】 CollUtil增加filterNew等方法(原filter变更为filterNew,新增filter)
* 【crypto】 Sign增加setParameter方法
* 【extra】 Sftp得put方法增加进度支持(issue#518@Github)
+* 【core】 ArrayUtil增加distinct方法
### Bug修复
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
index aa0fa6158..9eb32e6af 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
@@ -6,7 +6,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.Map;
+import java.util.Set;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.IterUtil;
@@ -3827,4 +3829,24 @@ public class ArrayUtil {
public static boolean isAllNotEmpty(Object... args) {
return false == hasEmpty(args);
}
+
+ /**
+ * 去重数组中的元素,去重后生成新的数组,原数组不变
+ * 此方法通过{@link LinkedHashSet} 去重
+ *
+ * @param array 数组
+ * @return 去重后的数组
+ */
+ @SuppressWarnings("unchecked")
+ public static T[] distinct(T[] array) {
+ if(isEmpty(array)) {
+ return array;
+ }
+
+ final Set set = new LinkedHashSet<>(array.length, 1);
+ for (T t : array) {
+ set.add(t);
+ }
+ return toArray(set, (Class)getComponentType(array));
+ }
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
index eade5fb69..fd4205397 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
@@ -225,4 +225,11 @@ public class ArrayUtilTest {
arrayType = ArrayUtil.getArrayType(String.class);
Assert.assertEquals(String[].class, arrayType);
}
+
+ @Test
+ public void distinctTest() {
+ String[] array = {"aa", "bb", "cc", "dd", "bb", "dd"};
+ String[] distinct = ArrayUtil.distinct(array);
+ Assert.assertArrayEquals(new String[] {"aa", "bb", "cc", "dd"}, distinct);
+ }
}