如何从String数组中查找重复的字符串

时间:2013-03-12 09:01:37

标签: java

我有一个字符串数组,它包含字符串列表。我想弄清楚这个列表中是否有任何重复的条目。基本上我有一个用户列表,应该没有重复的条目。

9 个答案:

答案 0 :(得分:8)

您可以将String数组添加到HashSet

Set<String> h = new HashSet<String>(Arrays.asList(new String[] { "a", "b" }));

这将获得唯一的String值。如有必要,将HashSet转换回数组

String[] uniqueValues = h.toArray(new String[0]);

答案 1 :(得分:6)

如果你需要独特的东西,那么我们在java中设置

  String[] users = "User1,User2,User1,User,User".split(",");

        Set<String> uniquUsers = new HashSet<String>();

        for (int i = 0; i < users.length; i++) {
            if (!uniquUsers.add(users[i]))
                users[i] = "Duplicate"; // here I am assigning Duplicate instead if find duplicate
                                        // you can assign as null or whatever you want to do with duplicates.
        }
        System.out.println(Arrays.toString(users));

答案 2 :(得分:2)

将它们全部添加到Set中,您将获得唯一身份用户。然后将其转换回数组。

答案 3 :(得分:0)

按字母顺序排序。如果任何两个相邻的条目相同,则表示您找到了副本。

答案 4 :(得分:0)

如果您想检查添加新用户,只需运行数组并在每个现有用户上使用username.equals(*)

如果您有一个包含重复条目的数组,请为您拥有的每个用户运行此algorythm。

这些是粗略的方法,对这个问题有很多优化。

答案 5 :(得分:0)

正如您所提到的,不应该有重复的条目,所以最好在添加新用户之前迭代整个数组,而不是添加然后检查重复项。 前一种解决方案可以在O(N)中解决它。

答案 6 :(得分:0)

Patashu的想法似乎最简单。您可以使用Arrays.sort()轻松高效地对数组进行排序。

如果你真的想要搜索,你可能会使用Arrays.binarysearch()方法之一。但它们也需要排序数组....对于数组中的每个元素(比如索引 n ),搜索0 ...部分( n -1)和也搜索部分( n +1)...(长度为1)但如果你只能与 n 相邻的一个元素进行比较,那将是非常浪费的。所以它回到了之前的建议。

如果你想稍微减少编码,可能是以牺牲速度为代价,你可以使用contains()的一个实现类的AbstractCollection方法 - 可能{{1 (可以包含重复项),ArrayList(已排序,包含唯一值)或TreeSet(未排序,包含唯一值)。您可以使用参数HashSet为这些集合调用构造函数,因此您不需要逐个填充。

正如 ay89 正确提到的那样,拥有一个具有唯一值的数组(换句话说就是一个集合)更简单,然后在尝试添加它之前检查您的值是否已经包含。使事情变得更简单。但是你可能并不总是对你所拥有的东西有这种奢侈。

答案 7 :(得分:0)

创建一个数组news_data并在其中添加字符串。

for (int i = 0; i < news_data.length; i++) {
                for (int j = i+1; j < news_data.length; j++) {
                    if(news_data[i].equals(news_data[j])){
                        news_data = removeElement(news_data, j);
                    }
                }
            }
   public static String[] removeElement(String[] original, int element){
        String[] n = new String[original.length - 1];
        System.arraycopy(original, 0, n, 0, element );
        System.arraycopy(original, element+1, n, element, original.length - element-1);
        return n;
    }

答案 8 :(得分:-3)

非常简单,使用LINQ在列表中查找副本。