如何合并两个没有重复的字符串数组?

时间:2021-05-06 13:21:34

标签: java arrays string duplicates

我能够对两个数组进行排序和合并,但我不知道如何删除重复项。有人可以帮我解决这个问题吗?到目前为止,这是我的代码:

public class FinalArray {
    public static void main(String[] args) {
        String[] testArray1 = {"coffee", "tea", "water"};
        String[] testArray2 = {"lemonade", "juice", "water"};
        mergeUniqueValues(testArray1, testArray2);
    }

    public static void mergeUniqueValues(String[] arr1, String[] arr2) {
        String[] arr3 = new String[arr1.length + arr2.length];

        for (int i = 0; i < arr1.length; i++) {
            arr3[i] = arr1[i];
        }
        for (int i = arr1.length, index = 0; i < arr1.length + arr2.length; i++, index++) {
            arr3[i] = arr2[index];
        }
        Arrays.sort(arr3);

        System.out.println("Your sorted array is: ");
        for (String str : arr3) {
            System.out.println(str);
        }
    }
}

4 个答案:

答案 0 :(得分:1)

集合属性:不允许重复。

您可以简单地将数组转换为 Set(以避免重复),然后将其转换回数组。

这是一个示例代码供您参考:

public class Main {

    public static void main(String[] args) {

        String[] testArray1 = {"coffee", "tea", "water"};
        String[] testArray2 = {"lemonade", "juice", "water"};
        mergeUniqueValues(testArray1, testArray2);
    }

    public static void mergeUniqueValues(String[] arr1, String[] arr2) {
        Set noDuplicateSet = new HashSet();
        noDuplicateSet.addAll(Arrays.asList(arr1));
        noDuplicateSet.addAll(Arrays.asList(arr2));

        String[] noDuplicateArray = new String[noDuplicateSet.size()];
        noDuplicateSet.toArray(noDuplicateArray);

        Arrays.sort(noDuplicateArray);

        System.out.println("Your sorted array is: ");
        for (String str : noDuplicateArray) {
            System.out.println(str);
        }
    }
}

输出:

Your sorted array is: 
coffee
juice
lemonade
tea
water

答案 1 :(得分:1)

您可以使用 Java Streams 和 distinct()

String[] result =
  Stream.concat( // combine
    Stream.of(array1),
    Stream.of(array1))
  .distinct()    // filter duplicates
  .sorted()      // sort
  .toArray(String[]::new);

答案 2 :(得分:0)

您可以利用 java.util.TreeSet 类,该类是一个实现 java.util.Set 的集合,由按给定元素的自然顺序排序的所有唯一值组成。在您的情况下,String 确实实现了 Comparable,因此当元素插入到集合中时,它可以自然排序。

这是您可以测试的代码:

import java.util.*;

public class MergeArray {

    public static void main(String[] args) {

        String[] testArray1 = { "coffee", "tea", "water" };
        String[] testArray2 = { "lemonade", "juice", "water" };
        
        mergeUniqueValues(testArray1, testArray2);
    }

    public static void mergeUniqueValues(String[] arr1, String[] arr2) {
        
        Set<String> mergedList = new TreeSet(Arrays.asList(arr1));
        mergedList.addAll(Arrays.asList(arr2));
        String[] arr3 = mergedList.toArray(String[]::new);
        
        System.out.println("Your sorted array is: ");
        for (String str : arr3) {
            System.out.println(str);
        }
    }

}

这是输出:

Your sorted array is: 
coffee
juice
lemonade
tea
water

答案 3 :(得分:0)

您可以使用Java Stream

String[] testArray1 = {"coffee", "tea", "water"};
String[] testArray2 = {"lemonade", "juice", "water"};

String[] testArray3 = Stream.of(testArray1, testArray2)
        .flatMap(Arrays::stream).distinct().sorted().toArray(String[]::new);

Arrays.stream(testArray3).forEach(System.out::println);
//coffee
//juice
//lemonade
//tea
//water
相关问题