美文网首页
java排序总结

java排序总结

作者: andy_db22 | 来源:发表于2023-05-10 17:04 被阅读0次

队列排序常见的问题总结

  • Long类型强制转换问题
   var addToQueueTime: Long

   fun compareTo(entity2: IBroadCastEntity): Int {
       return (entity2.addToQueueTime - addToQueueTime).toInt()
   }

该情况下long类型强制转换为int类型,存在数据溢出隐患,本来 entity2.addToQueueTime - addToQueueTime > 0的,结果数据 溢出后可能为 负值,从而产生相反的排序结果

  • 漏掉==的情况
data class ImChatMsgItem(
    var userId: Long = 0,
    var avatar: String = "",
    var name: String = "",
    var lastMsg: String = "",
    var lastMsgTime: Long = 0,
) : Comparable<ImChatMsgItem> {
    override fun compareTo(other: MsgItem): Int {
        return if (other.lastMsgTime - lastMsgTime > 0) {
            1
        } else {
            -1
        }
    }
}

该情况下,漏掉了相等的情况,会引发相应的报错

java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:866)
    at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:483)
    at java.util.ComparableTimSort.mergeForceCollapse(ComparableTimSort.java:422)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:222)
    at java.util.Arrays.sort(Arrays.java:1302)
    at java.util.Arrays.sort(Arrays.java:1485)
    at java.util.ArrayList.sort(ArrayList.java:1470)
    at java.util.Collections.sort(Collections.java:206)
    at java.util.Collections.sort(Collections.java:159)
    at kotlin.collections.CollectionsKt__MutableCollectionsJVMKt.sort((MutableCollectionsJVM.kt:31) (#pluginId:host#)

到这里不得提下,java中对比的3原则

自反性:当 两个相同的元素相比时,compare必须返回0,也就是compare(o1, o1) = 0;

反对称性:如果compare(o1,o2) = 1,则compare(o2, o1)必须返回符号相反的值也就是 -1;

传递性:如果 a>b, b>c, 则 a必然大于c。也就是compare(a,b)>0, compare(b,c)>0, 则compare(a,c)>0

上面这个用列就是违反自反性原则,导致的报错

总结下升序和降序的总结

class MyComparator implements Comparator<A> {

    @Override
    public int compare(A o1, A o2) {
        //升序
        //return o1.a - o2.a;
        //降序:后面会具体分析为什么降序
        return o2.a - o1.a;
    }
}

相关文章

  • 一文搞定十大经典排序算法(Java实现)

    本文总结十大经典排序算法及变形,并提供Java实现。参考文章:十大经典排序算法总结(Java语言实现)快速排序算法...

  • java内置排序总结

    java内置排序总结 平时在工作的过程中也经常用到java中的一些排序的算法,但是很少系统的总结一下,今天简单的总...

  • 排序算法最强总结及其代码实现(Python/Java)

    前言 本文总结了常用的全部排序算法,内容包括: 排序算法的定义和思路 排序算法的代码实现:Python和Java,...

  • JAVA排序算法总结

    通过对排序算法的总结,更深一步去了解JAVA。 1.时间复杂度为O(n*n)的排序算法 冒泡排序 选择排序 插入排...

  • 7大经典的排序算法总结实现

    作者 : 专注J2EE来源 : 博客园 常见排序算法总结与实现 本文使用Java实现这几种排序。以下是对排序算法总...

  • 常见排序算法总结 -- java实现

    常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次...

  • Java自定义排序简单总结

    简单总结 默认情况下:Java实现Comparator排序是升序,即自然排序 根据参数,返回值来判断是否交换 对于...

  • Java比较器(对象排序)

    Java实现排序的方式 自然排序:java.lang.Comparable 定制排序:java.lang.Comp...

  • 排序算法

    十大经典排序算法最强总结(含JAVA代码实现) - 郭耀华 - 博客园 1、冒泡排序 前后比较 一轮排序 最后一个...

  • java排序方法资料

    java排序,效率高的是哪种排序方法 JAVA快速排序(高效) java中常用的几种排序算法 相关代码: /* *...

网友评论

      本文标题:java排序总结

      本文链接:https://www.haomeiwen.com/subject/srqplltx.html