千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Java集合排序()

Java集合排序()

来源:千锋教育
发布人:syq
时间: 2022-10-09 10:37:59 1665283079

  作为处理数据的开发人员,我们需要的最常见的功能之一是排序 - 通过能够对数据进行排序,我们可以优化算法以更快地运行,并在一小部分时间内找到所需的数据。在今天的课程中,我们将讨论 Java 集合排序()。作为一个快速的思想实验:想象一下,你正在通过一所大学的名册搜索一个名字。这所学校可能有成千上万的学生。

Java集合排序()

  如果您获得的花名册不是按字母顺序排列的,则需要翻阅每一页并仔细查看,以确保您没有在任何地方跳过一个名字,直到您最终找到您要查找的名字。另一方面,如果花名册按字母顺序排列,您不仅必须在搜索时不那么严格,而且您可以轻松地跳转到花名册中具有相同第一个字母的部分,并继续以大跳跃的方式跳转页面,直到您找到您要找的人。您使用的数据越多,尽可能有效和高效地使用它就越重要。在本文中,我们将介绍如何使用集合排序方法对 Java 中的任何列表实现(包括 ArrayList)进行排序。

  如何使用 Java 集合排序方法对 Java 中的数组列表进行排序

  我们来谈谈 Java 集合排序方法。java.util 软件包包含许多有用的实用程序和软件包,这些实用程序和软件包经常被开发人员使用,包括 ArrayList。假设您有以下简单的程序:您希望能够打印出颜色列表,但按字母顺序排列。你怎么会这样做?使用 java.util.集合,排序就像一行一样简单:哒哒!您的颜色列表现已就地排序。如果您要打印出列表,那么您将获得以下输出:这有多容易?!使用 Collections.sort() 按升序对整数、浮点数或任何其他简单数据类型的列表进行排序同样简单。

  但是,如果要按降序排序,该怎么办?在有些情况下,这是有道理的——想象一下,你有一个特定班级的考试成绩列表,你想弄清楚谁是得分最高的学生。按降序(最高分优先)对列表进行排序会更有意义,这样您正在寻找的答案就在顶部。值得庆幸的是,Collection.sort()被可选的第二个参数覆盖,它允许您执行以下操作:但是什么是比较器?好吧,比较器只是一个比较两个输入并返回一个数字的函数,表示哪个输入先出现。如果要对基元数据类型的数组列表进行排序,则 Java 集合已经为您提供了反向Order() 比较器。可以这样称呼它:现在,颜色已经就地进行了反向排序,因此,如果您将其打印出来,您将获得以下输出:

1

  如何使用集合对 Java 中的非基元数据类型进行排序

  到目前为止,您已经看到使用Java中的字符串或整数对数组列表进行排序集合.排序()方法就像一行代码一样简单。但通常,您的数组列表将存储非基元数据类型。在处理具有更复杂属性的数据时,您将需要编写类来表示这些对象,以及如何使用它们的属性将它们相互比较。为了探索这方面的一个示例,让我们重温对颜色列表进行排序的示例,但这一次,我们将对 Color 对象进行排序,而不是对字符串进行排序。

  我们的基本 Color 类可能如下所示:为了使我们的 Color 类与 Collections.sort() 兼容,以便集合可以了解如何比较和排序 Color 对象,我们需要进行两个小的修改:

2

  1.使颜色成为可比较对象(添加实现可比较<对象>)

  2.重写类中的 compareTo 方法(重写公共整型比较To(对象 o))

  通过这些修改,我们的类现在看起来像这样:请注意,颜色的 compareTo 方法只是调用字符串的 compareTo 方法;排序将按字母顺序完成。例如,如果我们想按红色值升序排序,我们可以将 return 语句替换为 return this.r - c.r;(如果我们想按绿色值降序排序,它将返回 c.g - this.g;)。现在,如果我们调用颜色数组列表而不仅仅是字符串,它将起作用,因为集合知道如何比较颜色对象。

  如果不想使对象实现可比较<对象>,也可以为类编写一个比较器,并将其传递到 2 参数 Collection.sort() 方法中。比较器重写公共整型比较方法(对象一、对象二),而 Collections.sort() 方法在排序时使用它来比较对象。下面实现了 SortByName 和 SortByRed 比较器的示例:这样,您现在可以在没有实际实现可比较的 Color 类的情况下进行调用,并且它仍然有效。有时,您将看到这是使用 lambda 函数以内联方式完成的。lambda 函数本质上是一个无名称函数,您可以在调用它的代码行中定义它。

  当您只需要为一个特定实例调用一个函数并且不想在其他地方定义一个完整的单独函数时,它们非常有用。SortByName 比较器可以使用 lambda 函数以内联方式定义,如下所示:您可能已经猜到了,(a, b) 表示 lambda 函数(要比较的两个对象)的参数。->表示接下来是 lambda 函数定义。仅此而已!您现在已经看到了使用集合包在 Java 中对数组列表进行排序的最常用方法。

3

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT