0

Java でリンク リストの文字列配列を作成しようとしています。次に、配列内のすべてを空の文字列に初期化します。現在、それらはすべてnullコンストラクターのために で初期化されています。これは、配列の内容に対してメソッドNullPointerExceptionを使用するときに発生します。equals()そのため、代わりにすべてを空の文字列に初期化したいと考えています。どうすればいいですか?

    private LinkedList<String>[] table;

    public Hashtable (int capacity, String hashFn) {
        table = new LinkedList[capacity]
        hashFn = hashFn;
    }
4

3 に答える 3

1

あなたの質問を正しく理解している場合、私の意見では、あなたと特定の文字列を比較したい場合は、.equals()回避するために次のように使用することをお勧めします。NPEStringLinkedList

if("givenString".equals(strObjFromLinkedList)) {
        //Do what you want
}
于 2012-04-06T06:14:28.533 に答える
1

このように、ループして各項目を空の文字列に設定する必要があると思います...

private LinkedList<String>[] table;

public Hashtable (int capacity, String hashFn) {
  table = new LinkedList[capacity];
  String emptyString = "";
  for (int i=0;i<capacity,i++){
    table.add(emptyString);
    }
  }

あなたがやりたいことをやろうとしたことはありませんが、それを行うための簡単な方法は見つかりませんでした.

もちろん、String[] arrayではなくにすればLinkedList<String>[] array、単純に呼び出すことができますjava.util.Arrays.fill(array,"");

于 2012-04-06T05:38:23.017 に答える
0

直接的な答えは、Collectionsクラスが次のnCopiesような方法を使用できるメソッドを提供することです。

    List<String> l = new LinkedList<String>(Collections.nCopies(capacity, ""));

for明示的なループの記述を避けるため。ただし、ループのfor方が効率的です。


しかし、私が本当に言いたいのは、それLinkedListはプライマリ ハッシュ テーブルを実装するための悪い選択だということです。get(int)およびのような操作set(int, T)O(N)、リンクされたリスト用です。を使用する必要がありArrayList<String>ますString[]。これらにはO(1)、要素を取得および設定するための操作があります。その上、使用するメモリが大幅に少なくなります。

nullさらに、空の文字列で埋めるよりも明示的なテストを行う方がよいでしょう。実際には、JVM はとにかく見たものの背後でその null テストを実行する可能性があります。自分で行うことで、1) 空の文字列との比較を回避し、2) 初期化時間を節約できます。

NPE の問題を解決する方法は複数あります...

于 2012-04-07T04:08:20.437 に答える