2013-08-25 19 views
6

こんにちは皆さん。 私は List<String>(またはArrayList)を作成する必要があるボキャブラリーアプリケーションを作っています。そうするために、私は以下のコード(単なる例)を作成しました:ArrayListが自動的にヌル項目を追加する

List<String> tempSOLUTION = new ArrayList<String>(); 
String temp = "abc123"; 
tempSOLUTION.add(temp); 

私も次のことを試してみた:

tempSOLUTION.add(new String(temp)); 

それらの両方がリストに項目を追加します

[abc123, null, null, null, null, null, null, null, null, null, null, null] 

この新しいリストはHashableMap<String>上のキーなので、どのよう私の問題は、私はそれらのヌルのアイテムを持つことができないということですが、デバッグしながら、私はそれは、配列が以下の通り12個のオブジェクトを、持っていますことを見つけます変更の意志キーは存在しないため、例外が発生します。リストの

スクリーンショット(tempSOLUTION)は、デバッガを使用して詳細:http://www.pabloarteaga.es/stackoverflow.jpg

私はこれらすべてのヌルのアイテムを作成することなく、リストに項目を追加できますか?

は、検索した後、私は、これらのヌルの項目を削除する方法についての答えは、見つかった:

tempSOLUTION.removeAll(Collections.singleton(null)); 

をしかし、それは私の目的のために動作しません。

ありがとうございます。

答えて

15

おそらく、内部配列をデバッガで調べていると思います。それは問題ではありません。実装の詳細です。

重要なことは、公開APIを通じて見えるものです。言い換えれば、size()(など)に何を呼び出すかが分かります。 (そして、それがその後、奇妙な何かが起こっている、あなたのコード例で1を返しません!あれば)あなたのスクリーンショットから、

+0

ありがとう、私の質問を解決しました:) システムが許可するとすぐに回答として受け入れます。 – vagaerg

6

まさに

[abc123, null, null, null, null, null, null, null, null, null, null, null] 

であることはArrayList自体が、そのではないことは明らかですメンバー変数objectDataは、ArrayListの内部バッファです(実際に追加する要素を格納します)。

このバッファは、新しい要素を追加するたびにobjectData全体を大きな配列として再割り当てする必要があり、すべての要素をコピーする必要があるため、確かに高価になるため、ArrayListの実際のサイズよりも大きいサイズになります。

Oliのアドバイスに従うだけで、実装の詳細は無視され、インターフェイスだけが信頼されます。

+0

ありがとう、ありがとうございます。そんなことは分かりませんでした。 配列が12個よりも大きい場合、そのバッファはさらに大きくなりますか? 投票には申し訳ありませんが、十分な担当者がいません。 – vagaerg

関連する問題