簡體   English   中英

Java ArrayList搜索

[英]Java ArrayList search

我有一個String類型的ArrayList 我想確定此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:獲得元素vkl: gtr的索引,而不循環數組列表(搜索也應該不區分大小寫,因此使用vkl:VkL:應該給出vkl: gtr的索引)

我怎樣才能做到這一點 ?

提前致謝。

您必須循環ArrayList。 您可能無法僅訪問單個索引,並確保它是您要查找的內容。

另外,如果涉及大量搜索,則應考慮使用其他數據結構。 搜索ArrayList需要O(n)時間,而可以在O(log n)完成類似紅黑樹的操作。

如果在程序執行之前知道用於在結構中定位項目的字符串,請考慮使用HashMap。 您可以訪問O(1)的項目。

如果這些解決方案都不適合您的特定問題,請擴大您的嘗試范圍,我們將以最少的搜索時間為您找到商品的方式提供更好的答案。

這是只要你可以與你的要求得到,如果你不希望進行循環,並針對搜索ArrayList中舉行的字符串對象。

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:");
}
for(int i=0; i < asd.size(); i++) {
    String s = asd.get(i);
    //search the string
    if(found) {
        return i
    }
}
return -1

我不太了解您是否在尋找像鍵值對或單個字符串條目搜索之類的東西。 如果要查找第一個,如果要搜索鍵,則應使用Map而不是簡單的數組。在這里,您可以使用

put(Object key, Object value) 

並獲得指定鍵的值

get(Object key) 

如果您只是尋找一種將字符串的一部分查找到數組中的快速方法,則必須讀取所有索引並使用stringToCompare.equalsIgnoreCase(otherStringToCompare)逐一比較字符串。 請注意,如果stringToCompare為NULL,這將引發異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM