有人可以解释以下内容吗?
private HashSet nodes[];
nodes = new HashSet[21];
我有点困惑......在
之间的区别private HashSet nodes = new HashSet;
以上,尤其是方括号语法。这是一个HashSets数组吗?因为通常我习惯看
int[] myarray = new int[21];
或类似的东西。
答案 0 :(得分:5)
他们只是替代品 - 不幸的是,两者都是有效的。
哎呀,即使这样也是有效的:
int[] bad [] = null;
这相当于
int[][] bad = null;
显然不要这样做:)
[]可以在声明开头作为类型的一部分出现,也可以作为特定变量的声明者的一部分,或两者兼而有之。
和
我们不建议在数组变量声明中使用“混合表示法”,其中括号出现在类型和声明符中。
基本上,使用将所有类型信息保存在一个地方的表单 - 您习惯使用的表单。那是压倒性的惯用形式。
答案 1 :(得分:3)
private HashSet nodes = new HashSet;
是无效的Java。与JavaScript不同,Java中的new
运算符始终需要带括号的参数列表。
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
反思。答案 2 :(得分: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)
答案 3 :(得分:1)
在Java中,声明
private HashSet nodes[];
等同于声明
private HashSet[] nodes;
它可以发音为“HashSets数组”或“HashSet数组”。