- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 Java 8 u151
我们正在进行以下排序:
Collections.sort(srs, (sr1, sr2) -> sr1.getValidStartTime().compareTo(sr2.getValidEndTime()));
其中 getValidStartTime 和 getValidEndTime 是 Date 对象。
显然这段代码是错误的,因为我们的目标实际上只是根据开始时间排序。
然而,不幸的是,导致问题的数据已从数据库中删除,我们得到了臭名昭著的 IllegalArgumentException。这似乎合乎逻辑,因为在元素之间,我们没有使用相同的值进行比较(A.start 与 B.end 进行比较,但 B.start 与 C.end 进行比较)。
我做不到的是找出一个导致这个异常再次抛出的数据集。修复代码以始终比较开始时间是正确的方法,但关于数据集之前和之后的测试,我无法展示修复的证据(即使每个人都已经同意我们正在接受更改)。
尝试查看抛出此问题的 TimSort 的 mergeHi 方法,但我无法完全理解正在进行的所有 gallop 和 Array 复制操作。因此,虽然我可以知道异常是在哪里抛出的,但让它可重现却以失败告终。
并且 Date 对象在各种类型之间是静态的。一旦在数据库中设置,它们就是不可变的。列表本身在排序期间也没有改变。所以对我来说,我可能是错的,这指向数据并且我们有一些奇怪的开始日期和结束日期的组合违反了传递条款,但我尝试过的每个组合总是有一个有效的(如果不是有点奇怪的话)看)排序。
谢谢!
最佳答案
最简单的方法就是不断生成随机列表并尝试排序,直到检查失败。在jdk 1.8.0_111上,导致异常的最短列表是32个元素长。以下是可用于初始化 Date
值并将导致异常的开始/结束时间戳列表:
{start=68208554877356084, end=3791095193142800835}
{start=248264922016936970, end=5326356389367348592}
{start=70847878331153962, end=1329864610265504554}
{start=299053597297857298, end=4543460986676142955}
{start=2075045414748723202, end=1193808915252175698}
{start=1888180037471781608, end=2492314749794483810}
{start=506596727265987351, end=2390472400080050280}
{start=4533260585328085001, end=2273691205607504663}
{start=5678209310012100575, end=959412777775545678}
{start=2732174389724934002, end=1780458709387750881}
{start=3098641550091084357, end=7078749384785410602}
{start=556524021068368297, end=8482788837298542192}
{start=98318333071465581, end=4156661237757928788}
{start=2084735587245502205, end=4379712643293008540}
{start=3165092267008534695, end=3427927233210778860}
{start=3109680552226050258, end=7303065366486904947}
{start=4928610946211198422, end=6426677832945805822}
{start=965369716172656147, end=6219167484686793206}
{start=805041445200191777, end=2942634988195806902}
{start=8045405997433808237, end=6001857015663585724}
{start=6633159983148701791, end=1448351075620872268}
{start=4539362557763873114, end=8432020244491782408}
{start=7435017849572867526, end=5951614001812150640}
{start=9205367993832979048, end=1341233048581746570}
{start=8478026453445310753, end=530855741009189818}
{start=4638397659065784972, end=2597599860193612976}
{start=3683809635722753669, end=8506390941316155399}
{start=5946468237919207244, end=3711093891423756040}
{start=6965128507257577261, end=8627460098134987362}
{start=7493578845247407113, end=8568660839840900159}
{start=7097494652946649557, end=8999069292652823540}
{start=9190087421488513073, end=20737341215892578}
关于java - 用日期强制 TimSort IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48332261/
我想了解Timsort。包括所有细节,所以像“只需在 Java 或 Python 中调用 .sort()”这样的答案不是我要找的。 我已经阅读了 Wikipedia article , Java im
来自: http://svn.python.org/projects/python/trunk/Objects/listsort.txt 和: http://en.wikipedia.org/wiki
这个比较器方法有什么问题? 我已阅读: Java error: Comparison method violates its general contract 并理解,如果 c1 > c2,且 c2
Java 7 changed the sorting algorithm这样它就会抛出一个 java.lang.IllegalArgumentException: "Comparison method
我想对列表进行排序并观察/可视化 Python 的排序算法 Timsort正在移动元素。 第一次尝试 : list 的子类每次更改后都会打印出来: class List(list): def
这是我得到的堆栈跟踪 Caused by: java.lang.IllegalArgumentException: Comparison method violates its general con
TimSort 是一种将在 Java 7 中默认用于排序的算法。 我找到了这个来源,但我不明白应该调用哪个方法,因为它们都是私有(private)的。有人能看懂吗?谢谢。 http://cr.open
我正在尝试在 Swift 中实现 TimSort。我已经提到了这两个链接:This和 this我转换为 Swift 的代码是: import UIKit class ViewController: U
我已经实现了 TimSort,但我确实需要能够按不同的字段进行排序。例如。按字段 2,然后 1,然后 3 排序。我一般知道如何执行此操作,如果先前给定的排序字段相等,则按下一个字段排序,但我正在寻找具
我正在开发一个启发式例程,需要维护一个排序的序列/数组/列表。我听说 timsort 可以快速维护具有已排序子序列的序列的顺序。 另一方面,我需要的很简单。在对序列进行初步排序后,我需要在每个步骤中重
我试图理解 Timsort 算法,但我无法理解实现堆栈不变性的原因: A > B+C B > C 根据 this文档, We would like to delay merging as long a
使用 Java 8 u151 我们正在进行以下排序: Collections.sort(srs, (sr1, sr2) -> sr1.getValidStartTime().compareTo(sr2
在 TimRun document 的“计算最小运行”部分,它给出了为 N=2112 数组选择 minrun 的好坏示例。它指出使用 minrun = 32 是低效的,因为 runs of lengt
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
Timsort is an adaptive, stable, natural mergesort. It has supernatural performance on many kinds of
我找到了 Timsort 的 Swenson C 实现: https://github.com/swenson/sort在一个较旧的 SO 问题中提到过。 我遇到两个问题: 1)要使用它,我需要定义适
我正在研究“timsort”算法,以便对我相当大的数据集进行排序: http://timsort4net.codeplex.com/ 通常我使用 Array.Sort(Keys, Items),其中
我在使用我自己的比较器实现通过 Collections.sort() 对我的集合进行排序时遇到问题。抛出的异常是-->“IllegalArgumentException:比较方法违反了其一般契约!在我
// // main.cpp // timsort // // Created by Atharva Koli on 2019/1/27. // Copyright © 2019 Athar
我一直在寻找一种为 C++ 实现 Timsort 的方法 (Implementation found on Github)使用多线程,我尝试在此过程中使用。我确信我使用的是正确的编译器标志,但每当我尝
我是一名优秀的程序员,十分优秀!