2

有人可以解释以下内容吗?

private HashSet nodes[]; 
nodes = new HashSet[21];

我有点困惑......之间的区别

private HashSet nodes = new HashSet;

和以上,特别是在方括号语法方面。这是一个 HashSet 数组吗?因为通常我习惯于看到

int[] myarray = new int[21];

或类似的东西。

4

4 回答 4

5

它们只是替代品 - 不幸的是,两者都是有效的。

哎呀,即使这也是有效的:

int[] bad [] = null;

这相当于

int[][] bad = null;

显然不要这样做:)

JLS 的第 10.2 节

[] 可以作为类型的一部分出现在声明的开头,或者作为特定变量的声明符的一部分,或者两者兼而有之。

我们不建议在数组变量声明中使用“混合表示法”,其中括号出现在类型和声明符中。

基本上,使用将所有类型信息保存在一个地方的表单 - 您习惯的表单。这是绝大多数惯用的形式。

于 2012-04-06T23:00:50.433 回答
3
private HashSet nodes = new HashSet;

不是有效的 Java。与 JavaScript 不同,newJava 中的运算符始终需要带括号的参数列表。

private HashSet nodes = new HashSet(21);

不同于

private HashSet[] nodes = new HashSet[21];

因为前者构造了一个HashSet集合,该集合最初有足够的空间容纳 21 个集合项,而后者是一个21空值数组,可以填充对集合的引用。


private HashSet nodes[]; 

声明一个成员变量,它可以引用任何元素类型为 的数组HashSet

nodes = new HashSet[21];

创建一个包含 21 个引用空间的数组HashSet并将其分配给该成员变量。

请记住,在 Java 中,与 C 不同,HashSet[21]它不是一种类型,因此您不能只通过以下方式为 Java 中的数组分配空间

int[21] myints;

在某些时候,您必须通过创建一个数组

  • new <type>[size],
  • 缩写语法new <type> { element0, element1, element2, ... }
  • 或反射性地通过java.lang.reflect.Array.newInstance.
于 2012-04-06T23:00:50.227 回答
2

是的,它是一个数组HashSets

HashSet nodes[];

是相同的

HashSet[] nodes;

仅当您使用逗号一次声明一堆变量时,放置括号的位置的差异才变得重要:

HashSet[] alpha, bravo, charlie; // Three arrays of hashsets
HashSet delta[], echo, foxtrot; // One array (delta) and two hashsets (echo and foxtrot)
于 2012-04-06T22:59:22.393 回答
1

在 Java 中,声明

private HashSet nodes[];

相当于声明

private HashSet[] nodes;

它可以读作“一个 HashSet 数组”或“一个 HashSet 数组”。

于 2012-04-06T23:02:52.610 回答