この質問は、Javafor-eachループの要素がどのように扱われるかに関するものです。LinkedListsの配列であるhashTableがあります。LinkedListノードのデータ部分にはが含まれますTableEntry<K,V>
。ここで、KとVはキーと値のタイプです。
LinkedListの各TableEntryを調べて、キーがTableEntryキーと等しいかどうかを確認するforループを作成しました。構文はちょっと醜いので、for-eachループの方がエレガントでシンプルだと思いました。
確かに、書く方が簡単でした。しかし、IDEを終了すると、element.getValue()はV型ではなくObject型であると文句を言いました。ステートメントの前にV型キャストを配置すると、文句はなくなります。私はまだこのコードをテストしていませんが、最初にこれは許容できる方法ですか?次に、タイプVのメソッドがあるのに、要素がタイプObjectになるのはなぜですか?
@Override
public V getValue(K key)
{
int index = getHashIndex(key);
if(hashTable[index] != null)
{
//Standard for loop
for(int i = 0; hashTable[index].get(i) != null; i++)
{
if(hashTable[index].get(i).getKey().equals(key))
{
return hashTable[index].get(i).getValue();
}
}
//For-each loop should do same thing?
for(TableEntry element : hashTable[index])
{
if(element.getKey().equals(key))
{
return (V) element.getValue();
}
}
}
return null;
}