これが可能な理由
Map <char[],char[]>F = new HashMap<char[],char[]>();
char []R = {'J','K','L'};
char []X = {'J','L'};
F.put(R,X);
これはそうではありませんが
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put({'J','K','L'}, {'J','L'});
2 番目の例の正しい構文は次のとおりです。
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
初期化子の外で使用する{'J', 'K', 'L'}
と、コンパイラは配列の型を推測しようとしません。明示的に記載する必要があります。
また、 は 2 つの配列のアドレスarray1.equals(array2)
を比較するため、驚くような動作をすることに注意してください。検討:HashMap
Map<char[], char[]> F = new HashMap<char[], char[]>();
F.put(new char[] { 'J', 'K', 'L' }, new char[] { 'J', 'L' });
F.put(new char[] { 'J', 'K', 'L' }, new char[] { 'J', 'L' });
System.out.println(F.size());
私のマシンでは2
、2 つのキーがまったく同じ文字で構成されていても、これは出力されます。
これは可能です -
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
{'J', 'K', 'L'}
構文の不一致を引き起こす型のない無名配列です。
{'J', ...} は匿名配列を宣言する方法ではありません。配列が保持する型を明示的に宣言する必要があります。
あなたはおそらく欲しい
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char[]{'J','K','L'}, new char[]{'J','L'});
オペランドの型を次のように明示的に指定する必要があります。
Map <char[],char[]>F = new HashMap<char[],char[]>();
F.put(new char []{'J','K','L'}, new char []{'J','L'});
これは機能します。