我正在尝试在Java中实现稳定(先进先出)优先级队列.假设密钥是一个名称,值是一个年龄,我知道我可以像这样建立一个不稳定的优先级队列:
Queue<Map.Entry<String, Integer>> pq = new PriorityQueue<Map.Entry<String, Integer>>(100, ageComparator);
Run Code Online (Sandbox Code Playgroud)
这几乎可以满足我所需要的一切,除了它在我插入(或删除它们)时不保持键值对的顺序.
我通过创建一个LinkedList找到了"解决方法",它实际上提供了所有相同的功能,除了它不包含带比较器选项的构造函数,我觉得它必须更慢,因为我保持值排序通过Collections.sort()在每个队列操作后调用.
所以我想我真的有两个选项让我感兴趣.首先,我如何编辑上面的PriorityQueue来维护插入和删除顺序?或者第二,我如何强制我的LinkedList选项立即使用比较器,而不是必须在每个操作上调用排序?谢谢!
编辑:
感谢发布的第一条评论中的好问题.通过FIFO,我的意思是对于具有相等值的键值对,应首先提取首先放入的对.
假设我有一个从 A1 开始并经过的日期列表...
1/3/2014
2/5/2014
5/5/2015
8/10/2016
...
我想统计某个月份出现在这个范围内的次数。我当前的解决方案是它下面的行只包含=MONTH(x1),其中x是列,然后我在该行上调用 COUNTIF 。
我不认为这是一个糟糕的解决方案,但它确实需要一大堆额外的单元格来计算电子表格中的月份,这对于其他任何事情来说并不是真正必要的。
所以基本上,有什么方法可以按照 =COUNTIF(MONTH(range),5) 的方式进行一些操作来计数,例如,五月发生某事的次数?
我有两个项目.第一个a-child是一个列表,其中包含一个数组作为其第一个元素,然后是一些字符串作为其余元素.另一个mapped是包含许多数组的列表.通过检查,很容易看到它a-child在mapped,虽然我找不到一个能找到它的功能.
我为下面糟糕的lisp风格道歉 - 我几天前开始,所以我还没有拿起所有的约定.
(defparameter a-child (list (#2A((1 2 3) (7 4 5) (9 8 6))) "U" "R" "R"))
(defparameter mapped (list (#2A((1 2 3) (7 4 5) (9 8 6))) (#2A((1 2 3) (4 5 6) (7 8 9)))))
(find (car a-child) mapped) ;;returns NIL
(member (car a-child) mapped) ;;returns NIL
(position (car a-child) mapped) ;;returns NIL
(equalp (car a-child) (car mapped)) ;;returns T
Run Code Online (Sandbox Code Playgroud)
我可以用什么函数来查找数组列表中的数组?谢谢.
arrays ×1
clisp ×1
common-lisp ×1
comparator ×1
countif ×1
excel ×1
find ×1
java ×1
linked-list ×1
list ×1
queue ×1