我想在O(LOGN)的时间与优先级队列功能的数据结构,还能够删除一定不是在O(LOGN)时间的头一个特定的元素。我听说java中的TreeSet做了它,但不允许重复,我如何解决这个问题?如何在Java中使用允许重复的TreeSet?
-3
A
回答
2
使用TreeMap它允许插入在log n
时间和删除log n
时间。您可以在那里存储TreeMap<Integer,Integer>
其中密钥存储元素的值,值存储元素的频率。
如果你需要做的只是Insert
和Delete
操作,使用Java的Priority Queue。它也允许在log n
时间插入和删除在log n
时间,因为它使用Heaps
来存储数据。
通过执行TreeMap
的功能,您可以执行Insertion
,Deletion
。
TreeMap<Integer,Integer> map=new TreeMap<Integer,Integer>();
插入:
public boolean insert(int value) throws Exception
{
try
{
if(!map.containsKey(value))
map.put(value,0);
map.put(value,map.get(value)+1);
return true;
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
}
头队列(PEEK):
public int getHead()
{
if(map.firstKey()==null)
return null;
return (int)map.firstKey();
}
删除和检索头(轮询):
public int removeHead()
{
if(getHead()==null)
return null;
int head=getHead();
if(map.get(head)==1)
map.remove(head);
else
map.put(head,map.get(head)-1);
}
1
我没有足够的信誉发表评论,所以我会在这里说这个。我认为按照here的说明去除优先队列中的元素是O(N)。
你也许能够解决这个问题在某些情况下。如果您不打算在删除对象后添加对象,则可以对priorityqueue进行封装并保留已删除元素的散列集。然后,如果您在轮询时遇到该对象,则将其丢弃。
你也可以使用一个有序列表创建自己的PriorityQueue。然后,您可以使用二进制搜索来查找插入位置或要有效删除的索引。
相关问题
- 1. 允许重复项的TreeSet或TreeMap
- 2. Java中的数据结构是否像TreeSet一样,但允许重复?
- 3. 允许重复使用options_for_select
- 4. 如何停止允许在Dynamics AX 4.0中使用重复项
- 5. 如何允许在Irony.NET重复
- 6. 如何修复允许重复
- 7. 的NSMutableArray:如何允许重复的值
- 8. HashSet的犯规允许重复,但如何编写逻辑允许重复
- 9. 在Java中使用TreeSet
- 10. 列表允许重复,但如何编写逻辑DIS-允许列表重复在Java核心
- 11. Hashset允许重复?
- 12. HashMap允许重复?
- 13. Java HashSet仍然允许重复项
- 14. 哪个Java收集允许重复键
- 15. Java:使用TreeSet
- 16. HashSet如何不允许重复?
- 17. 如何在BerkeleyDB中允许StoredMap中的重复项?
- 18. 如何TreeSet的检查重复
- 19. 如何修复logstash/jruby中的“不允许重复扩展”?
- 20. 如何在Magento中允许重复的SKU
- 21. 如何在asp.net成员资格中允许重复的名称?
- 22. 如何在ZF2重复接受的数据中允许Doctrine
- 23. 如何在ModelMultipleChoiceField中允许重复的值
- 24. 如何在Access索引中允许重复的空白?
- 25. ng不允许重复重复
- 26. Django - 允许重复的用户名
- 27. 允许SQL Server 2008中的重复uniqueidentifiers?
- 28. has_and_belongs_to_many允许没有重复
- 29. mlogit重复'row.names'不允许
- 30. VBA - 允许重复项
例如,你可以添加一个正在运行的ID,以确保您有没有重复 –
一组的*整点*,Java或其他地方,是它不允许重复。 – chrylis
如果你想插入重复的东西,然后创建一个数据结构并插入它的对象。这样它允许重复 – bharath