Scala学习之sorted,sortWith,sortBy源码及用法

本文详细介绍了Scala中集合的三种排序方式:sorted、sortWith和sortBy,通过源码分析它们的区别。sorted依赖于Ordering并调用java.util.Arrays.sort,sortBy则需要指定排序属性,而sortWith需要自定义比较函数。同时,文章通过实例展示了如何使用这些方法,并给出了排序结果。
摘要由CSDN通过智能技术生成

scala的集合中提供了三种排序的方式:sorted,sortWith,sortBy。那么这三种方式有什么不同呢。下面我们结合源码来分析一下

1.sorted

先来看看scala中sorted的源码。

  def sorted[B >: A](implicit ord: Ordering[B]): Repr = {
    val len = this.length
    val arr = new ArraySeq[A](len)
    var i = 0
    for (x <- this.seq) {
      arr(i) = x
      i += 1
    }
    java.util.Arrays.sort(arr.array, ord.asInstanceOf[Ordering[Object]])
    val b = newBuilder
    b.sizeHint(len)
    for (x <- arr) b += x
    b.result
  }

源码中有两点值得注意的地方:
1.sorted方法中有个隐式参数ord: Ordering。
2.sorted方法真正排序的逻辑是调用的java.util.Arrays.sort。

2.sortBy

看看sortBy的源码,很简单。

  def sortBy[B](f: A => B)(implicit ord: Ordering[B]): Repr = sorted(ord on f)

sortBy最后也是调用的sorted方法。不一样的地方在于,sortBy前面还需要提供一个属性。

3.sortWith

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值