我的列表中有这样一个< code>compareTo代码:
public int compareTo(className a)
{
return (this.long1 > a.long1) ? 1 : -1;
}
当我使用Collections.sort(list)
时,我得到以下错误:比较方法违反了它的一般契约!
当我将其更改为<code>if(this.long1
...
2000100
2000101
2000102
1000100
1000101
2000101
2000102
...
现在,重复确实发生了,需要正确排序。重复项是出现在第一个还是最后一个并不重要,只要它们按顺序正确分组,如下所示:
...
2000100
2000101
2000101
2000102
2000102
1000100
1000101
...
我该如何正确地做到这一点?谢谢你。
更新
该列表仍在按以下所有建议排序。这是因为它是一个列表吗
一个正确的解决方案应该这样做:
public int compareTo(className a) {
return this.long1 > a.long1 ? 1 : this.long1 < a.long1 ? -1 : 0;
}
return (this.long1 > a.long1) ? 1 : -1;
如果两个数字相等,则返回-1,而不是0。
return (this.long1 >= a.long1) ? 1 : -1;
现在 1 等于,仍然不是 0。
正确:
if(this.long1 > a.long1) return 1;
if(this.long1 < a.long1) return -1;
return 0;
当两个数字相等时,您应该返回0,或者只使用<code>Long。比较:
public int compareTo(className a)
{
return Long.compare(this.long1,a.long1);
}
我有一个java程序,它可以构建一个最大堆,调用Heapify并对任何列表进行排序。目前,它将对字母表进行排序,不会出现任何问题,甚至还会列出一系列字符串,如apple、addle、azzle,也不会出现任何问题。下面是程序输入的屏幕截图,其中显示了第一行要排序的项目数及其下面的列表: 绿色是我知道已经正确排序的输入。如果检查unicode表,可以看到绿色列表的排序正确。但是,我的程序输出不正确(
“StringComparator”在“arrays.sort(b,new StringComparator());”出货量和预期的一样。 但当我使用默认排序(步骤如下),然后按“StringComparator”排序时,bug显示: “Arrays.Sort(a);Arrays.Sort(a,new StringComparator());”
问题内容: 我在db中有类型的字段。我使用PostgreSQL。和查询 不返回行中的值是。 但是例如查询 正常工作。 如何解决此问题并获取行? 问题答案: 要 解决 您的问题,请改用数据类型 ,该数据类型不是浮点类型,而是任意精度类型。 如果将数字文字 输入到(相同的单词,不同的含义)列中,则会存储 确切的 数量- 与a或column列不同,在该列中,值被强制为下一个可能的二进制近似值。这可能是正
问题内容: 我正在尝试根据用户输入对对象列表进行排序。如何使sort方法实现变体比较器? 例: 如何根据需要根据getKey / getModified /其他任意属性进行上述排序? 问题答案: 如果所有“键”都将链接到getter方法,则可以在函数中使用键/ getter的静态映射: 注意:我们将不得不使用原始类型,因为我们不能使用不同的类型(即使所有的获取方法都将返回对象,也会有所不同) 然后
我不完全理解如何对自定义对象使用Java PriorityQueue(最大堆)。 我正在研究LeetCode问题,代码必须按单词长度对句子中的单词重新排序。我的直觉是,我可以使用PriorityQueue来为我进行单词排序。为此,我想我可以使用自定义对象跟踪单词: 然后: 我用来测试的第一句话是“”。(来自LC帖子。) 我希望的顺序是:“”(最短到最长的语序) 但是当我运行上面的代码并检查调试器中
我正在尝试自己编程气泡排序、选择排序和插入排序。但是,我在插入排序方面遇到了麻烦。我会提供我的代码以及每行在做什么 好的,所以int count是找出排序数组的起始位置。然后我声明了index以查找将元素放在排序数组之后的位置,并为未排序数组的第一个元素声明了一个临时int,如果它小于排序数组的最后一个元素。然后它反转数组直到第一个元素,如果它大于我要添加的元素,则为其索引分配索引。本质上是为了让