簡體   English   中英

自定義鏈表的調用indexof(java)

[英]customize an indexof call for a linkedlist (java)

我正在處理一個很大的(自定義對象)鏈表,並且試圖確定要添加到列表中的對象是否已經存在。

問題是我要搜索的項目是一個唯一的對象,其中包含:第一個字符串A第二個字符串一個唯一的Count#

我試圖找出我的鏈表中是否有包含(第一個字符串)和(第二個字符串)的項目,但是忽略了(唯一的Count#)。

可以通過遍歷每個單獨的鏈表項來完成愚蠢的方式(我先嘗試過的方式),但這花費的時間太長。 我正在努力加快速度! 我認為使用(indexOf)會有所幫助,但我不知道如何自定義其搜索內容。

有任何想法嗎?

indexOf()也具有O(n)性能,因為它會逐步掃描List直到找到所需的元素。

列表排序了嗎? 如果是這樣,您也許可以使用quicksort之類的元素來搜索元素。

如果您需要固定時間訪問隨機元素,那么我認為最好不要選擇鏈接列表。

您需要使用LinkedList嗎? 如果不是傳統代碼,則建議使用HashSetLinkedHashMap 兩者都將為您提供恆定時間的查找,並且如果您仍然需要插入順序迭代,則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.

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