Skip to content

Commit 45512f2

Browse files
author
maskleo
authored
Update 01_Comparable.md
1 parent 03303a9 commit 45512f2

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

ch03/01_Comparable.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
}
88
```
99

10-
根据参数是小于,等于还是大于给定对象,`compareTo` 方法返回一个负值,零值或正值。 当一个类实现 `Comparable` 时,由该接口指定的顺序被称为该类的自然顺序。
10+
根据参数是小于,等于还是大于给定对象,`compareTo` 方法返回一个负值,零值或正值。 当一个类实现 `Comparable` 时,由该接口指定的顺序被称为该类的自然顺
11+
序。
1112

1213
通常,属于类的对象只能与属于同一类的对象进行比较。 例如,`Integer` 实现了 `Comparable <Integer>`
1314

@@ -55,15 +56,21 @@
5556

5657
在这种情况下,我们说自然顺序与平等一致。
5758

58-
建议您在设计课程时选择与平等一致的自然排序。如果在集合框架中使用接口 `SortedSet``SortedMap`,这两个函数使用自然排序来比较项目,这一点尤其重要。如果两个比较相同的项目被添加到一个有序集合中,则只有一个将被存储,即使这两个项目不相等;排序地图也是如此。 (您也可以使用第3.4节中描述的比较器指定不同的排序以用于排序集合或排序映射;但在这种情况下,指定排序应该再次与等号一致)。
59+
建议您在设计课程时选择与平等一致的自然排序。如果在集合框架中使用接口 `SortedSet``SortedMap`,这两个函数使用自然排序来比较项目,这一点尤其重要。
60+
如果两个比较相同的项目被添加到一个有序集合中,则只有一个将被存储,即使这两个项目不相等;排序地图也是如此。 (您也可以使用第3.4节中描述的比较器指定不同
61+
的排序以用于排序集合或排序映射;但在这种情况下,指定排序应该再次与等号一致)。
5962

60-
`Java` 核心库中几乎每个具有自然排序的类都与 `equals` 相一致。 `java.math.BigDecimal` 是一个例外,它将具有相同值但精度不同的两个小数进行比较,例如 `4.0``4.00``3.3` 节给出了另一个与自然顺序不相等的类的例子。
63+
`Java` 核心库中几乎每个具有自然排序的类都与 `equals` 相一致。 `java.math.BigDecimal` 是一个例外,它将具有相同值但精度不同的两个小数进行比较,例如
64+
`4.0``4.00``3.3` 节给出了另一个与自然顺序不相等的类的例子。
6165

62-
比较不同于平等,因为它不接受空参数。 如果 `x` 不为空,则为 `x.equals(null)` 必须返回 `false`,而 `x.compareTo(null)` 必须抛出 `NullPointerException`
66+
比较不同于平等,因为它不接受空参数。 如果 `x` 不为空,则为 `x.equals(null)` 必须返回 `false`,而 `x.compareTo(null)` 必须抛出
67+
`NullPointerException`
6368

64-
我们使用标准成语进行比较,写入 `x.compareTo(y)<0` 而不是 `x <y`,并且写入 `x.compareTo(y)<= 0 `而不是 `x <= y`。 使用其中的最后一个,甚至在诸如 `java.math.BigDecimal之` 类的类型上自然排序与 `equals` 不一致是非常明智的。
69+
我们使用标准成语进行比较,写入 `x.compareTo(y)<0` 而不是 `x <y`,并且写入 `x.compareTo(y)<= 0 `而不是 `x <= y`。 使用其中的最后一个,甚至在诸如
70+
`java.math.BigDecimal之` 类的类型上自然排序与 `equals` 不一致是非常明智的。
6571

66-
**可比契约** `Comparable <T>` 接口的契约指定了三个属性。 这些属性是使用符号函数定义的,函数的定义使得 `sgn(x)` 返回 `-1`,`0``1`,具体取决于 `x` 是负数,零还是正数。
72+
**可比契约** `Comparable <T>` 接口的契约指定了三个属性。 这些属性是使用符号函数定义的,函数的定义使得 `sgn(x)` 返回 `-1`,`0``1`,具体取决于
73+
`x` 是负数,零还是正数。
6774

6875
首先,比较是反对称的。 颠倒参数的顺序颠倒了结果:
6976

@@ -87,7 +94,8 @@
8794
if x.compareTo(y) == 0 then sgn(x.compareTo(z)) == sgn(y.compareTo(z))
8895
```
8996

90-
这概括了数字的属性:如果 `x == y`,那么 `x <z` 当且仅当 `y <z`。 据推测,如果 `x.compareTo(y)== 0`,那么 `x.compareTo(z)` 会引发异常,当且仅当 `y.compareTo(z)`引发异常时,也需要这样做,尽管没有明确说明。
97+
这概括了数字的属性:如果 `x == y`,那么 `x <z` 当且仅当 `y <z`。 据推测,如果 `x.compareTo(y)== 0`,那么 `x.compareTo(z)` 会引发异常,当且仅当
98+
`y.compareTo(z)`引发异常时,也需要这样做,尽管没有明确说明。
9199

92100
强烈建议比较与平等兼容:
93101

@@ -120,7 +128,8 @@
120128
}
121129
```
122130

123-
条件表达式根据接收方是小于,等于还是大于参数返回 `-1`,`0``1`。 你可能会认为下面的代码也会起作用,因为如果接收者小于参数,该方法被允许返回任何负数。
131+
条件表达式根据接收方是小于,等于还是大于参数返回 `-1`,`0``1`。 你可能会认为下面的代码也会起作用,因为如果接收者小于参数,该方法被允许返回任何负
132+
数。
124133

125134
```java
126135
class Integer implements Comparable<Integer> {

0 commit comments

Comments
 (0)