2017-08-08 15 views
0

私のコードをスピードアップしたい。クイックステータス情報:JAVA - コードを高速化

  • 複数のリスト(Stringは)_list1_list2_list3のような存在です。

  • これらのリストで単語(String)を検索しようとしています。

  • 単語を見つけたら、リストの単語のインデックスを使用します。ここで

は私のコードです:

private static int foundIndex (String s) 
{ 
    if (_list1.contains(s)) { 
     return _list1.indexOf(s); 
    } else if (_list2.contains(s)) { 
     return _list2.indexOf(s); 
    } else if (_list3.contains(s)) { 
     return _list3.indexOf(s); 
    } else if (_list4.contains(s)) { 
     return _list4.indexOf(s); 
    } 
... 
... 
... 
... 
    } else if (_list100.contains(s)) { 
     return _list100.indexOf(s); 
    } 
    return -1; 
} 

私は私のコードをスピードアップするにはどうすればよいですか?

+0

'' Map 'のインデックスに' s'をマップすることができます。 –

+1

どのJavaバージョンですか? – Euclides

+1

リストがわからないときにインデックスを返す...あまり役に立ちません –

答えて

1

List<String>にすべてのあなたのリスト(String)を追加し、それを繰り返す:

private static int foundIndex (String s) { 
    for (String currentList : lists){ 
     int indexOf = currentList.indexOf(s); 
     if (indexOf != -1) { 
      return indexOf; 
     } 
    } 
    return -1; 
} 
+0

リストがわからないときにインデックスを返します。(プライマリソリューションのように)あまり役に立ちません。 –

+1

@Jacek Cz可能です。私は必要性を知らない。いくつかの変更を加えれば、インデックスとリストの両方を含むカスタムクラス 'ListAndIndex'を返すかもしれません。 – davidxxx

2

夫婦簡単な最適化が頭に浮かぶ:

if (contains) then indexOfパターン1.replace if (i = indexOf(s) >= 0) return i

で2. Map<String,Integer>のような参照データ構造を追加し、リストの代わりに使用するか、リストを追加または変更するたびにそれを更新することによって追加します。

0

私のコードのアルゴリズムをあなたの提案に変更しました。 私はずっと以前にリストを使用していましたが、今度はそれを変更しました。 2D String配列を使用します。 しかし、コードのパフォーマンスは157%低下しました。

新しいコード:

private static String[][] _lists = new String[200][100]; 

private static int foundIndex (String s) { 
for (int i = 0; i < 200; i++) { 
     for (int j = 0; j < 100; j++) { 
      if (_lists[i][j].equals(s) == true) { 
       return j; 
      } 
     } 
    } 
    return -1; 
} 

問題が始まるのです。

私が探しているコードが "_list [180] [?]"であれば、それを見つけるのは難しいです。

私のコードを高速化するにはどうすればよいですか?

ありがとうございます。