2016-06-22 6 views
0

私はいくつかのコードを持っており、ArrayListの反復処理が時間の経過とともに大幅に遅くなることに気付きました。問題の原因となっているように見えるのコードは以下の通りです:時間がたつにつれてarraylistのJavaアクセス要素が遅くなります

public boolean isWordOfficial(String word){ 
    return this.wordList.get(this.stringWordList.indexOf(word)).isWordOfficial(); 
} 

は、このコードについての何かは、私が2つのArrayListへのアクセスの面で知らないはありますか?

+2

時間の経過とともにどういう意味ですか?また、なぜこれのために2つのArrayListを使用していますか? – Carter

+0

全体のコードを提供してください。 –

答えて

6

私はない正確な理由、またはどのくらい、あなたのArrayListパフォーマンスが遅すぎるとなってきているが、あなたのユースケースで一目から、次の操作を行っていることで行います。

  • 文字列与えられましたwordは、stringWordListでそれを見て、数値インデックス
  • を返すこのインデックスに含まれているwordListで単語を検索し、それが

用法のこのパターンは、より良いSERVだろう返しますMapによって編集され、キーはwordの入力となり、おそらくstringWordListのエントリに対応し、wordListから別の単語が出力されます。

リストの検索ではO(N)と比べて、マップの参照はO(1)の操作になります。

+0

クイックアンサーをありがとう、実装を見ていきます。私のニーズに基づいて、私はおそらく両方のarraylistsを持っているだろうが、その特定の機能のためのマップも作成するだろう。セットアップの読み込み画面/アラートがあるので、そこで実行できます。 – cat96

+0

私はあなたに地図を作成する方法のコードを与えていたでしょうが、あなたが与えたスニペットは、私が意味をなさないために与えたもののために十分ではありません。 –

+0

それはいいです、私はマップを構築する方法を知っています。 – cat96

0

this.stringWordList.indexOfはO(N)であり、これが問題の原因です。 Nが増えるにつれて(単語をリストに追加すると)、これらの操作にはより長い時間がかかります。

リストをソートしないようにするには、binarySearchを使用してください。

これは、O(n)からO(log(N))までの複雑さを取ります。

関連する問題