使用Hashsets计算没有重复项的数组中的字符串数量

时间:2014-04-27 23:58:10

标签: java string hashset

我正在尝试使用散列集来计算字符串数组中的字符串数量,而不计算重复项。但是,此程序无法正常工作。例如。这段代码打印出" 4",实际上它们只有3个独特的字符串。有谁知道为什么这个工作不正确?

    String centers[]=new String[1000];


    /* Only for Testing Purposes*/
    centers[0] = "Soccer";
    centers[1] = "Soccer";
    centers[2]=  "Baseball";
    centers[3] = "Table Tennis";
    centers[4] = "Soccer";


    List<String> centerList = Arrays.asList(centers);
    Set<String> uniqueCenters = new HashSet<String>();
    uniqueCenters.addAll(centerList);
    Integer numberOfUniqueStrings = uniqueCenters.size();

    System.out.println(numberOfUniqueStrings);

2 个答案:

答案 0 :(得分:6)

只是一个猜测,但是centers有1000个元素,而你只设置了5个元素。也许其他995是null,给你一个HashSet,其元素超出预期(null)。

您可以通过打印内容轻松测试:

for (String s : uniqueCenters) {
    System.out.println("Got element: " + s);
}

答案 1 :(得分:1)

问题在于这句话:

String centers[]=new String[1000];

您正在创建一个包含1000个元素的String数组。在java中,实例化数组也会为数组元素分配一个默认值,在这种情况下,元素都具有null值。

这就是为什么当你创建该阵列的HashSet时,你实际上是在获得“足球”,“棒球”,“乒乓球”和null

编辑:

您可以通过调用uniqueCenters.remove(null);

删除HashSet中的空条目
相关问题