- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 SSCE:
public class ComparableItem implements Comparable<ComparableItem> {
private final int itemNo;
public ComparableItem(final int itemNo) {
this.itemNo = itemNo;
}
@Override
public int compareTo(ComparableItem o) {
if (this.itemNo < o.itemNo) {
return -1;
} else if (this.itemNo > o.itemNo) {
return 1;
}
return 0;
}
}
这是一个演示该问题的测试。创建 PQ 后代码就会中断。上面几行是为了证明由compareTo(..)定义的自然排序按预期工作。打印 PQ 的元素:14,9,15,5,6,3 与预期的 15,14,9,6,5,3。有人可以向我解释一下为什么会出现这种情况吗?
import org.junit.Test;
import java.util.*;
import static org.junit.Assert.*;
public class CompTest{
@Test
public void aTest() {
Integer[] order = {9, 3, 14, 15, 6, 5};
List<ComparableItem> items = new ArrayList<ComparableItem>(order.length);
for (int i = 0; i < order.length; i++) {
items.add(new ComparableItem(order[i]));
}
List<ComparableItem> greater = new ArrayList<ComparableItem>();
testCompare(items, items.get(3), greater, true);
testCompare(items, items.get(2), greater, true);
testCompare(items, items.get(0), greater, true);
testCompare(items, items.get(4), greater, true);
testCompare(items, items.get(5), greater, true);
testCompare(items, items.get(1), greater, true);
final PriorityQueue<ComparableItem> itemsQueue = new PriorityQueue<ComparableItem>(items);
greater = new ArrayList<ComparableItem>();
for (ComparableItem c : itemsQueue) {
testCompare(itemsQueue, c, greater, false);
}
}
public static void testCompare(final Collection<ComparableItem> items, final ComparableItem item, final List<ComparableItem> greater, boolean bigger) {
final int exp = (bigger)? -1:1;
for (ComparableItem c : items) {
final int expected = c.equals(item) ? 0 : greater.contains(c) ? exp : exp*-1;
assertEquals(expected, item.compareTo(c));
assertEquals(expected * -1, c.compareTo(item));
}
greater.add(item);
}
}
new PriorityQueue<ComparableItem>(items);
Creates a PriorityQueue containing the elements in the specified collection. If the specified collection is an instance of a SortedSet or is another PriorityQueue, this priority queue will be ordered according to the same ordering. Otherwise, this priority queue will be ordered according to the natural ordering of its elements.
最佳答案
我认为问题不在于队列,而在于您测试它的方式。特别是 PriorityQueue.iterator()
的 javadoc状态:
Returns an iterator over the elements in this queue. The iterator does not return the elements in any particular order.
类 javadoc 是这样说的:
The Iterator provided in method iterator() is not guaranteed to traverse the elements of the priority queue in any particular order. If you need ordered traversal, consider using Arrays.sort(pq.toArray()).
关于java - 如何创建根据列表的自然顺序排序的 PQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4263393/
query := "WITH b(ColA, ColB) AS (VALUES ($1,$2)) UPDATE schema_name.table_name AS a SET ColC = b.Col
为了简化代码,并防止一次又一次地传递相似的参数,我为以下某些结构创建了Put方法。 例如,此处未使用UID的原因是因为UID被设置为自动增加值。 type User struct { UID
我的 SSCE: public class ComparableItem implements Comparable { private final int itemNo; publi
我在我的项目中使用 GORM,一切都很好,直到我收到一个错误: pq: sorry, too many clients already 我只是使用默认配置。错误发生在我对我的应用程序做了很多测试请求之
就像在 VBA 中一样,我们可以将函数宏保存在 .xlam 文件中并将它们加载到另一个文件中。在电源查询中,我想将常用的函数存储在一个中心位置,并在必要时引用这些位置。 我知道我们可以按照this g
假设db的类型为*sql.DB(使用ugt lib/pq驱动程序),则以下代码会导致连接泄漏: rows, err := db.Query( "select 1 from th
我有以下代码: package main import ( "database/sql" "fmt" "github.com/lib/pq" ) const ( DB_
我正在运行 Digital Ocean 全新安装的 Ubuntu 14.04。我通过调用 sudo apt-get install postgresql postgresql-contrib 安装了
当我多次调用 GetMessages() 时,出现了 pq: sorry, too many clients already 错误。 请找到更新后的代码: main()代码 func main() {
在 PostgreSQL 数据库中我有一个表: | ORGANIZATION_ID | FACTOR_IDS | CALCULATION_VALUES | |-----------------|
我有以下函数应该从我的想法表中检索一行: func (s *IdeaService) GetIdea(id int64) (*ideaservice.Idea, error) { stmt,
我遇到问题,需要一些提示。我已经为 pq 公式编写了一个函数,想问一下,如何返回两个值?如何在函数中插入可选参数?就像平方根一样,这并不总是需要的?这是我的代码。我很感激任何帮助。提前致谢。 doub
在 Golang 应用程序中,我对 PostgreSQL 数据库进行 sql 查询,它返回了一个 int 数组。 var identifiers [] pq.Int64Array // Execute
我遇到了这个问题 db, err := sql.Open("postgres", "user=xxx dbname=xxx connect_timeout=5 sslmode=disable")
我在 go 中使用 pq 驱动程序 ( http://github.com/lib/pq ) 写入 postgres 数据库,但是当大量事务同时发生时,驱动程序会出现错误并执行以下操作: pq: so
我已经创建了我的 ZPL 字符串并在最后附加了 ^PQ +numCopies。调试器用 ^PQ3 显示整个字符串是正确的在末尾。但打印机只能打印 1 份。 打印机是 110Xi4,板载配置显示它在 Z
尝试打开数据库,但说用户“postgres”的密码身份验证失败 我找不到这个问题的根本原因。第一次,我正在使用Docker。求助 func openDB() (*sqlx.DB, error) {
我尝试创建一个简单的插入语句并得到错误: pq: syntax error at or near "," txn, err := db.Begin() stmt, err := db.Prepare(
使用 gorm 对 postgres 表进行表扫描,使用 libpq,它没有加载 pq.Int64Array。 简化模型: type Event struct { ExcludeDates p
我在 lib/pq GO 包中遇到了一个奇怪的问题。 尝试打开连接时,我收到以下错误: vendor/github.com/lib/pq/notify.go:790: undefined: time.
我是一名优秀的程序员,十分优秀!