簡體   English   中英

.equals() 與 .equalsignorecase() 與 .contains() 的時間復雜度

[英]Time Complexity of .equals() vs .equalsignorecase() vs .contains()

我的任務是在不使用 LinkedList 和 ArrayList 等導入庫的情況下創建 BFS Web 爬蟲。

因此,我需要創建自己的動態數組和 LinkedList 實現。

要求之一是嘗試使我的程序比僅使用導入的庫更有效。

當檢查我爬取的 URL 是否已經在我的動態數組中時,我使用 equals() 或 equalsignorecase() 而不是 contains()

請問這是否會提高時間復雜度?

我知道最壞的情況是 O(n) 但我看到 equals() 有時可能是 O(1)

`
        public boolean find (String URL) {
        for (int i = 0; i < this.arraylist.length; i++) {
            if (URL.equalsIgnoreCase(this.arraylist[i])) {
                return true;
            }
        }
        return false;
    }
`

你沒有'Hashmap'甚至'Vector'嗎?

在我看來,您正在對數組進行順序搜索,即 O(n),不太好。

相反,您可以擁有一個數組列表數組,並使用哈希碼。 就像是:

List<String>[] arrayLists = new List[100];
{
    for (int i=0; i<100; i++) arrayLists[i] = new ArrayList();
}

 public void store(String URL){
    arrayLists[URL.hashCode()%arrayLists.length].add(URL);
 }

 public boolean find (String URL) {
        List<String> myArrayList = arrayLists[URL.toLowerCase().hashCode()%arrayLists.length];

        for (int i = 0; i < myArrayList.size(); i++) {
            if (URL.equalsIgnoreCase(myArrayList.get(i))) {
                return true;
            }
        }
        
        return false;
 }

這應該給你一個 O(N/arrayLists.length) 的復雜性 - 隨着 arrayLists 的長度接近你的 URL 數量的長度,復雜性將下降到 O(1) 更壞的情況。

暫無
暫無

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

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