Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:有效地跟踪使用过的对象_Java_Search_Sorting_Duplicates - Fatal编程技术网

Java:有效地跟踪使用过的对象

Java:有效地跟踪使用过的对象,java,search,sorting,duplicates,Java,Search,Sorting,Duplicates,我有一个随时间收集对象的程序。这些对象通常是程序已经接收到的对象的副本,但并不总是如此。独特对象的数量有时可能达到数万个。随着我的列表的增长,识别一个对象以前是否出现过需要更多的时间 我目前的方法是将所有内容存储在ArrayList中,al;使用Collections.sort(al);并使用Collections.binarySearch(al,key)确定我是否使用过对象。然而,每次我遇到一个新对象时,我都必须插入并排序 我想知道是否有更好的方法。包含的速度往往过快。我在寻找尽可能接近O(1

我有一个随时间收集对象的程序。这些对象通常是程序已经接收到的对象的副本,但并不总是如此。独特对象的数量有时可能达到数万个。随着我的列表的增长,识别一个对象以前是否出现过需要更多的时间

我目前的方法是将所有内容存储在ArrayList中,al;使用Collections.sort(al);并使用Collections.binarySearch(al,key)确定我是否使用过对象。然而,每次我遇到一个新对象时,我都必须插入并排序

我想知道是否有更好的方法。包含的速度往往过快。我在寻找尽可能接近O(1)的东西

多谢

这是java。为了理解我所说的,我基本上需要一种方法来做到这一点:

public boolean objectAlreadyUsed(Object o) {
  return \\ Have we seen this object already?

}

这就引出了一个问题——为什么不使用不允许重复的数据结构(例如)?如果尝试复制项目,该方法将返回
false
,数据结构将保持不变。

这就引出了一个问题-为什么不使用不允许重复的数据结构(例如)?如果尝试复制项,该方法将返回
false
,数据结构将保持不变。

为什么不使用
数组列表
?您将获得,无需排序


N.B.您的对象将需要。

为什么不使用
数组列表
?您将获得,无需排序


N.B.您的对象将需要。

确保对象具有正确的
equals()
hashCode()
方法,并将它们存储在
HashSet
中。然后,查找时间变为常数


如果保留不需要的对象成为一个问题,顺便说一下,您可以考虑使用Internet上可用的许多<代码> WeakHashSet < /Cord>实现-它将保存对象,但仍然允许它们在必要时被垃圾收集。

确保对象具有正确的代码< >()/代码>和<代码> HASCODE()方法,并将它们存储在

哈希集中。然后,查找时间变为常数


顺便说一下,如果保留不需要的对象成为一个问题,可以考虑在Internet上使用许多<代码> WeakHashSet <代码>实现,它将保存对象,但如果需要的话,仍然允许它们被垃圾收集。

您可以只使用哈希集或HasMead而不是AARAYLIST。您可以使用哈希集或HasMead而不是AARAYLIST。哈希列表:(\\figues这是HashSet。谢谢…尝试一下。我可以在几分钟内接受它。工作很好。幸运的是,这次我的对象是字符串,因此不需要额外的实现…**等待单击以勾选…我查找了hashList.:(\\figures这是HashSet。谢谢…尝试一下。我可以在几分钟内接受它。工作得很好。幸运的是,这次我的对象是字符串,因此不需要额外的实现…**等待单击确定下来…这次我确实需要保留所有对象,这对我吐出的数据很重要,但很高兴知道。你学到了很多东西,而且很有趣你认为你知道关于Java的所有知识…但你不知道。:)这次我确实需要保留所有对象,这对我吐出的数据很重要,但知道很好。你学到了很多,你认为你知道关于Java的所有知识…但你不知道。:)