This question already has answers here:
Java Array, Finding Duplicates

(14个回答)


5年前关闭。




我发现了两种从字符串数组中找到重复值的方法。

第一种方式:
private static String FindDupValue(String[] sValueTemp) {
    for (int i = 0; i < sValueTemp.length; i++) {
      String sValueToCheck = sValueTemp[i];
      if(sValueToCheck==null || sValueToCheck.equals(""))continue;
      for (int j = 0; j < sValueTemp.length; j++) {
        if(i==j)continue;
        String sValueToCompare = sValueTemp[j];
        if (sValueToCheck.equals(sValueToCompare)){
          return sValueToCompare;
        }
      }

    }
    return "";

  }

第二种方式:
private static String FindDupValueUsingSet(String[] sValueTemp) {
    Set<String> sValueSet = new HashSet<String>();
    for(String tempValueSet : sValueTemp) {
      if (sValueSet.contains(tempValueSet))
        return tempValueSet;
      else
        if(!tempValueSet.equals(""))
          sValueSet.add(tempValueSet);
    }
    return "";
  }

两种方法都是正确的。

我的问题是哪种方法最好,为什么?还是有其他最佳方法来找出数组中的重复值?

最佳答案

Set的好处是add operation返回true(如果此集合尚未包含指定的元素)。

public static void main(String[] args) {
    Set<String> set = new HashSet<>();
    String[] stringsToTest = {"a", "b", "c", "a"};

    for (String s : stringsToTest) {
        boolean notInSetYet = set.add(s);

        if (!notInSetYet) {
            System.out.println("Duplicate: " + s);
        }
    }
}

输出:

09-27 16:55