繁体   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