教程Object Ordering指的是"自然排序"的概念:
如果List包含String元素,它将被排序 按字母顺序。如果它由Date元素组成,它将被排序 按时间顺序排列。这是怎么发生的?字符串和日期 实现Comparable接口。可比较的实现提供 一个类的自然顺序,允许该类的对象 自动排序。下表总结了一些 实现Comparable的更重要的Java平台类。
术语"自然顺序"特定于Java,还是与语言无关?例如,我可以谈谈"自然排序"在Ruby?
(注意:我不是在谈论Natural sort order,在Jeff Atwood的博客文章中提到Sorting for Humans : Natural Sort Order)
答案 0 :(得分:5)
这不是对自然排序类型的引用,其中字符串内的数字是“自然地”排序而不是按字典顺序逐位排序。 Java以不同的方式定义术语。
让我们改变重点:
Comparable
实现为类提供了自然的排序,允许自动对该类的对象进行排序。
“自然”一词意味着如果您实施Comparable
,那么您班级的用户可以轻松地对其进行排序,而无需自定义比较器。分类是自然的;它是内置的;它是免费的,不需要思考。
术语“自然排序”是特定于Java还是与语言无关的?
是。不是吗?它是特定于Java的,因为文档用术语表示并且有naturalOrder
method。但是,这个概念适用于其他语言。
例如,我可以谈谈Ruby中的“自然排序”吗?
你可以。如果你正在谈论袖口,你可以使用这个词。如果你正式写作,那么定义它是明智的。由于阿特伍德对这个术语的使用感到困惑,我更喜欢另一个。说,“默认排序”。
答案 1 :(得分:0)
至少在官方文档中。
来自Comparable
界面的API文档:
此接口对实现它的每个类的对象强加一个总排序。这种排序被称为类的自然排序,而类的compareTo方法被称为其自然比较方法。
如果我们非常熟悉API doc中的这一行。然后我们看到一个类实现了Comparable
接口,我们看到某个地方/有人提到了#34;自然顺序"在A
的两个实例中,我们知道它可能在讨论compareTo
方法强加的顺序。问题是,那个说/写这个词的人是否也知道这个特定的含义,并在上下文中使用它?
当然,API文档正在使用这种术语,因为它首先要做的是定义它。
答案 2 :(得分:0)
不,术语自然排序不是特定于Java的。我的意见是它根本不涉及编程语言;相反,可能所有编程语言(尽管它们可能会或可能不会明确使用该术语)都依赖于这个概念。
例如,如果没有自然排序的概念,max(a, b)
或a.after(b)
等方法如何工作?我们知道整数的自然顺序:1,2,3,...;日期1/1/1990,1/1/1990,1/1/1 1991,......;时间:12:00,12:01,1:01 ......这些系统是人为定义的,但它是我们所期望的。如果我们有一些整数 ordered 1,3,2,4,那将是 unnatural 。
正如我所读到的那样,你的引言就是这样的。实现Comparable
接口的类型提供“默认”,明确定义或预期的排序。对于开发人员定义的类型,开发人员可以强制执行自然排序(如Java开发人员使用Numbers)或定义自然顺序,就像我们经常使用自己的复杂类型一样。
当一个类实现Comparable
接口时,它提供编译时(自然)排序,只能通过提供自定义Comparator
来改变。尽管如此,我们可以在软件中表示的对象或系统数量有限,这些对象或系统具有真实,易于理解和接受的自然顺序。学生,汽车和用户等许多类型都可以依赖于决定其顺序的一个或多个属性组合,这些属性可能看起来并不自然。