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