jjzjj

priorityQueue

全部标签

java - 允许重复的 TreeSet 或 TreeMap

我需要一个Collection来对元素进行排序,但不删除重复元素。我选择了TreeSet,因为TreeSet实际上将值添加到支持的TreeMap:publicbooleanadd(Ee){returnm.put(e,PRESENT)==null;}并且TreeMap使用Comparatorscompare逻辑删除重复项我编写了一个Comparator,它在元素相等的情况下返回1而不是0。因此,在元素相等的情况下,带有此Comparator的TreeSet不会覆盖重复项,只会对其进行排序。我已经针对简单的String对象对其进行了测试,但我需要一组自定义对象。publicstaticvo

java - PriorityQueue addAll() 的复杂度

PriorityQueue的addAll方法复杂度如何。它是一次添加一个元素导致O(nlogn)还是使用构建堆过程在O(n)时间内从无序元素创建堆? 最佳答案 Javadoc似乎暗示addAll继承自AbstractQueue它作为添加序列实现。这让我相信复杂度为O(mlogn),其中m是要插入的集合的大小。 关于java-PriorityQueueaddAll()的复杂度,我们在StackOverflow上找到一个类似的问题: https://stackov

java - 为什么 PriorityQueue 不像 Queue?

我正在使用带有优先级字段的PriorityBlockingQueue。在我的测试中,我使用System#currentTime()作为优先级——计算机获得相同的优先级是如此之快以至于毫秒是相同的(或者更像是PC上的毫秒有一个余量)错误)。当优先级相同时,队列就像一个堆栈,这看起来很奇怪。当元素的优先级相同时,是否有其他方法可以使队列像普通队列一样工作(即FIFO而不是LIFO行为)? 最佳答案 Operationsonthisclassmakenoguaranteesabouttheorderingofelementswithequ

java - 将键和值添加到优先级队列中并在 Java 中按键排序

我正在尝试接收字符串列表并将它们添加到具有键和值的优先级队列中。键是单词,值是单词的字符串值。然后我需要先对字符串值最高的队列进行排序。优先级队列不允许我添加2个值。publicstaticListpQSortStrings(Liststrings){PriorityQueueq=newPriorityQueue();for(intx=0;x 最佳答案 问题PriorityQueue可以在它的每个节点中存储单个对象。所以你想做的事情不能按原样完成。但是您可以将两个对象组合在一个类中,然后使用PriorityQueue。您要么需要提供

java - 如何在 Clojure 中使 Java 类不可变?

我想在clojure中包装java的PriorityQueue类,以便在我的程序的另一部分中使用。我想弄清楚的是,是否有任何方法可以以lispy方式执行此操作并使优先级队列不可变。有什么好的方法可以做到这一点,还是我只是将PriorityQueue用作可变数据结构会更好? 最佳答案 我认为没有一种简单的方法可以将可变数据结构包装为不可变数据结构。当新版本可以巧妙地与旧版本共享数据时,不可变数据结构变得高效,如果不访问PriorityQueue的内部结构,我真的看不出如何做到这一点。如果你真的想要一个持久化的优先队列thisthrea

java - 动态订单统计: get k-th element in constant time?

所以,我正在尝试实现一个数据结构来处理动态订单统计。数据结构有以下操作:add(x):插入一个值为x的新元素get(k):返回第k个最小元素:k=ceiling(n/a),其中n=数据结构中的元素数量,a=常数因子。reset:重置整个数据结构,即数据结构“在它之后为空”我使用平衡的AVL树实现了我的数据结构。使用此操作具有以下时间复杂度:添加(x):O(log(n))得到(k):O(log(n))这是我对使用O(log(n))时间的get(k)的实现:publicstaticintget(Nodecurrent,intk){intl=tree.sizeLeft(current)+1;

java - Java 中的 PriorityQueue 如何对重复条目进行排序?

这听起来可能很傻,但是当您拥有(键,值)对对象并根据键对它们进行排序时,这很有意义。用代码来说明我的观点:publicclassPairimplementsComparable{privateintvalue;privateintkey;publicPair(intkey,intvalue){this.key=key;this.value=value;}@OverridepublicintcompareTo(Pairo){if(this.key>o.key)return1;elseif(this.keyqueue=newPriorityQueue;queue.add(newPair(1

Java PriorityQueue自定义比较器

在我的PriorityQueue中,我有2种类型的客户,VIP和普通客户。我想先服务VIP,再服务普通。如果CustomerID如果客户是VIP,他会排在VIP队列的末尾如果一位顾客是常客,他会排在整个队列的末尾。换句话说,我想按booleanVIP值排序,同时保留客户进来的顺序。这是我的订单类publicclassOrderimplementsComparable{privatefinalintcustomerID;privatefinalintamount;privatefinalbooleanvip_status;publicOrder(intcustomerID,intamou

java - 是否有一个队列(PriorityQueue)实现也是一个集合?

我正在寻找PriorityQueue实现也是Set.compareTo的实现如果它的元素必须不要求与equals的实现保持一致。Java有这样的实现吗?更新:我现在使用SortedSet作为内部集合来实现它。所以我只需要实现缺少的方法来满足队列接口(interface)。我还忘了提到它也必须是有界队列,因此它具有容量并在达到容量时丢弃集合的最后一个元素。 最佳答案 如果拥有一个具有“类似集合”行为的队列就足够了,我想你只是不想接受重复的条目,那么我认为,一个简单的解决方案可能是子类化PriorityQueue并覆盖add()、add

java - ArrayList.sort() 与 PriorityQueue

这个问题在这里已经有了答案:Java-PriorityQueuevssortedLinkedList(11个答案)关闭4年前。我需要支持比读取更多的插入并保持数据排序。哪个性能更好:使用提供比较器的PriorityQueue或使用ArrayList并在每次插入后调用.sort()?每次调用.sort()都感觉不对,但我说不清为什么。