归功于FredOverflow在他的评论中说,这被称为“半开区间”。因此,大概可以将Java集合描述为“ 基于0的半开放范围 ”。
我已经在其他地方整理了一些关于半开和封闭范围的讨论:
Siliconbrain.com-
使用半开范围的16个充分理由(为简洁起见进行了编辑):
- 范围内的元素数目
[n, m)只是m-n(和不m-n+1)。- 空范围是
[n, n)(而不是[n, n-1],如果n迭代器已经指向列表的第一个元素,或者if ,则可能是一个问题n == 0)。- 对于浮点数,您可以编写
[13, 42)(而不是[13, 41.999999999999])。- 当处理范围时,
+1和-1几乎从未使用过。如果它们很昂贵(如日期),则这是一个优势。- 如果您在范围内编写查找,则可以通过将末尾作为查找位置返回来轻松表明未找到任何事实:未找到
if( find( [begin, end) ) ==end)任何内容。- 在以0开头的数组下标的语言(例如C,C ++,JAVA,NCL)中,上限等于大小。
半开与封闭范围
半开范围的优势:
- 空范围有效:
[0 .. 0]- 子范围很容易转到原始内容的末尾:
[x .. $]- 易于分割范围:
[0 .. x]和[x .. $]近距离射程的优势:
- 对称。
- 可以说更容易阅读。
['a' ... 'z']``+ 1之后不需要尴尬'z'。 [0 ... uint.max]是可能的。
最后一点很有趣。
numberIsInRange(int n, int min, intmax)如果
Integer.MAX_VALUE可以合法地在范围内,则写一个半开范围的谓词确实很尴尬。



