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から:

[]は、宣言の先頭にある型の一部として、または特定の変数の宣言子の一部として、あるいはその両方として表示される場合があります。

配列変数宣言で「混合表記」を使用することはお勧めしません。この場合、型と宣言子の両方に角かっこが表示されます。

基本的に、すべての型情報を1か所に保持するフォーム(使い慣れたフォーム)を使用します。それは圧倒的に慣用的な形式です。

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

有効なJavaではありません。JavaScriptとは異なりnew、Javaの演算子には、常に括弧で囲まれた引数リストが必要です。

private HashSet nodes = new HashSet(21);

とは異なり

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

HashSet前者は最初に21セットのアイテムに十分なスペースを持つ1つのセットを構築し、後者は21セットへの参照で埋めることができるnull値の配列であるという点で。


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 に答える