0

私はArrayListタイプのを持っていStringます。ArrayListこの要素のいずれかが指定された文字列で始まるかどうかを判断し、ArrayListにこの要素が含まれている場合は、この要素のインデックスを取得します。ArrayListさらに、その要素のインデックスを取得するためにこれをループさせたくありません。

例えば ​​:

ArrayList<String> asd = new ArrayList<String>();  // We have an array list

//We filled the array list
asd.add("abcc trtiou");
asd.add("aiwr hiut qwe");
asd.add("vkl: gtr");
asd.add("aAgiur gfjhg ewru");

vkl: gtrここで、配列リストをループせずにを使用して要素のインデックスを取得したいと思いvkl:ます(検索でも大文字と小文字を区別しないため、を使用vkl:VkL:てインデックスを指定する必要がありますvkl: gtr

これどうやってするの ?

前もって感謝します。

4

4 に答える 4

11

ArrayListをループする必要があります。たぶん単一のインデックスにアクセスすることはできず、それがあなたが探しているものであることが保証されます。

また、多くの検索が含まれる場合は、別のデータ構造の使用を検討する必要があります。ArrayListの検索にはO(n)時間がかかりますが、で赤黒木などを実行できますO(log n)

プログラムの実行前に、構造内のアイテムを見つけるために使用される文字列がわかっている場合は、HashMapの使用を検討してください。のアイテムにアクセスできますO(1)

これらの解決策のいずれもあなたの特定の問題に適していない場合、あなたがやろうとしていることであなたの答えを拡張し、最小限の検索時間であなたがあなたのアイテムを見つける方法に関してより良い答えを提供することができます。

于 2012-04-26T18:04:34.540 に答える
2

これは、配列リストに保持されている文字列オブジェクトに対してループと検索を実行することを検討していない場合に、要件を満たせる限りです

if(asd.contains("vkl: gtr"))
{
  int index=asd.indexOf("vkl: gtr");
}

または単に:

int index = Arrays.binarySearch(asd.toArray(), 0, asd.size()-1, "vkl: gtr");

呼び出し元のメソッドでループを実行することが避けたい場合は、代わりに、拡張ArrayListしてインデックスルックアップを実行するメソッドを持つクラスを作成できます。

  class MyArray extends ArrayList<String>
  {
    public int getIndexOf(String o)
    {
      for (int i = 0; i < size(); i++)
      {
        if (get(i).contains((String) o)) return i;
      }
      return -(size() - 1);
    }
  }

次に、呼び出し側プログラムから次のことを行います。

public void foo()
{
    MyArray asd = new MyArray();
    asd.add("abcc trtiou");
    asd.add("aiwr hiut qwe");
    asd.add("vkl: gtr");
    asd.add("aAgiur gfjhg ewru");

    int index = asd.getIndexOf("vkl:");
}
于 2012-04-26T18:11:48.660 に答える
1
for(int i=0; i < asd.size(); i++) {
    String s = asd.get(i);
    //search the string
    if(found) {
        return i
    }
}
return -1
于 2012-04-26T18:12:16.860 に答える
0

キーと値のペアや単一の文字列エントリの検索などを探しているのかどうか、私にはよくわかりません。最初のものを探している場合、キーを検索したい場合は、単純な配列の代わりにマップを使用する必要があります。ここでは、を使用してペアを配置できます。

put(Object key, Object value) 

指定されたキーの値を取得する

get(Object key) 

文字列の一部を配列にすばやく見つける方法だけを探している場合は、すべてのインデックスを読み取り、stringToCompare.equalsIgnoreCase(otherStringToCompare)を使用して文字列を1つずつ比較する必要があります。stringToCompareがNULLの場合、これは例外をスローすることに注意してください

于 2012-04-26T18:11:52.490 に答える