我正在尝试使用散列集来计算字符串数组中的字符串数量,而不计算重复项。但是,此程序无法正常工作。例如。这段代码打印出" 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);
答案 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);