[英]customize an indexof call for a linkedlist (java)
我正在處理一個很大的(自定義對象)鏈表,並且試圖確定要添加到列表中的對象是否已經存在。
問題是我要搜索的項目是一個唯一的對象,其中包含:第一個字符串A第二個字符串一個唯一的Count#
我試圖找出我的鏈表中是否有包含(第一個字符串)和(第二個字符串)的項目,但是忽略了(唯一的Count#)。
可以通過遍歷每個單獨的鏈表項來完成愚蠢的方式(我先嘗試過的方式),但這花費的時間太長。 我正在努力加快速度! 我認為使用(indexOf)會有所幫助,但我不知道如何自定義其搜索內容。
有任何想法嗎?
indexOf()也具有O(n)性能,因為它會逐步掃描List直到找到所需的元素。
列表排序了嗎? 如果是這樣,您也許可以使用quicksort之類的元素來搜索元素。
如果您需要固定時間訪問隨機元素,那么我認為最好不要選擇鏈接列表。
您需要使用LinkedList嗎? 如果不是傳統代碼,則建議使用HashSet
或LinkedHashMap
。 兩者都將為您提供恆定時間的查找,並且如果您仍然需要插入順序迭代,則LinkedHashMap
會通過鍵運行內部的LinkedList
。
不幸的是,“啞巴方式”是最有效的方式,盡管您可以使用
if ( linkedList.contains(objectThatMayBeInList) ) { //do something }
問題在於,LinkedList的最佳情況是搜索O(N),其中N是列表的大小。 這意味着在任何給定的搜索中,您都會遇到N次計算的最壞情況。 鏈表並不是那種操作的最佳數據結構,但是同時,它還不錯,而且速度也不應該太慢,計算機可以做到這一點。 您是否可以提供更多有關列表大小的詳細信息?
基本上,您想確定對象A是否存在於鏈接列表L中。這是搜索問題,如果列表是無序的,則您不能比O(n)快。
如果您對列表進行排序(使插入速度變慢),則可以進行二進制搜索以查看列表中是否包含A,這樣會更快。
也許除了列表之外,您還可以保留一個Map(例如HashMap或TreeMap),以跟蹤列表中的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.