【发布时间】:2011-01-27 06:30:46
【问题描述】:
所以在 Java 中,只要给出索引范围,上限几乎总是排他性的。
来自java.lang.String:
substring(int beginIndex, int endIndex)返回一个新字符串,它是该字符串的子字符串。子字符串从指定的
beginIndex开始并延伸到索引endIndex - 1处的字符
来自java.util.Arrays:
copyOfRange(T[] original, int from, int to)
from- 要复制的范围的初始索引,包含to- 要复制的范围的最终索引,不包含。
来自java.util.BitSet:
set(int fromIndex, int toIndex)
fromIndex- 要设置的第一位的索引。toIndex- 要设置的最后一位之后的索引。
如您所见,Java 确实试图使其成为一个一致的约定,即上限是排他的。
我的问题是:
- 这是官方权威推荐吗?
- 是否存在值得我们警惕的明显违规行为?
- 这个系统有名字吗? (又是“基于 0”与“基于 1”)
澄清:我完全理解基于 0 的系统中的 N 对象集合被索引为 0..N-1。我的问题是,如果给定一个范围(2,4),它可以是 3 项或 2 项,具体取决于系统。你怎么称呼这些系统?
再次,问题不是“第一个索引0最后一个索引N-1”与“第一个索引1最后一个索引N”系统;这就是所谓的 0-based vs 1-based 系统。
问题是“(2,4) 中有 3 个元素”与“(2,4) 中有 2 个元素”系统。你怎么称呼这些,是官方认可的吗?
【问题讨论】:
-
称为半开范围。
-
啊,是的,我以前听过这个词。那么你会说 Java 集合是“基于 0 的半开范围”吗?
标签: java collections indexing range