当前位置: 首页 > 面试题库 >

是否总是假定索引范围的上限是互斥的?

晋坚
2023-03-14
问题内容

因此,在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试图使它成为一致的约定,即上限是互斥的。

我的问题是:

  • 这是官方权威html" target="_blank">推荐吗?
  • 是否有一些值得我们警惕的侵权行为?
  • 这个系统有名称吗?(ala“从0开始”与“从1开始”)

澄清:我完全理解N基于0的系统中的对象集合已建立索引0..N-1。我的问题是,如果(2,4)给定范围,则可以是3个项目或2个项目,具体取决于系统。您如何称呼这些系统?

再次,问题不是“第一索引0最后索引N-1”与“第一索引1最后索引N”系统;即基于0的系统与基于1的系统。

问题是“系统中有3个元素,而(2,4)vs (2,4)系统中有2个元素。您怎么称呼这些,其中一个受到正式制裁?


问题答案:

归功于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, int max)如果Integer.MAX_VALUE可以合法地在范围内,则写一个半开范围的谓词确实很尴尬。



 类似资料:
  • 问题内容: 有什么简单的方法可以在Linux上的Python中使用系统范围的互斥锁?“全系统”是指互斥体将由一组Python 进程使用 ;这与传统互斥锁相反,传统互斥锁由同一进程中的一组 线程 使用。 编辑:我不确定Python的软件包是我所需要的。例如,我可以在两个不同的解释器中执行以下命令: 当我在两个单独的解释器中同时执行这些命令时,我希望其中之一挂起。相反,它们都没有挂起。看来他们没有获得

  • MarkLogic版本-9 考虑一下,我有3个藏品,里面有大量的文档。 Collection 1:订单文档计数-10M元素-orderNumber 集合2:库存文档计数-100M 收款3:付款单据计数-50M 例如:我们想为collection1(Order)中的所有文档的元素“orderNumber”创建一个范围索引。这不是一次性的,我们的代码需要根据用户操作在文档中的不同元素上创建动态范围索引

  • 我们有一个运行nginx和php-fpm的UAT环境。我试图通过更改php将内存限制增加到2GB。ini。htaccess 重启nginx和php-fpm后,检查phpinfo(),发现这些更改没有对环境产生影响。 我可以知道原因吗?

  • 问题内容: 如果我有参数,那么我的程序只需使用函数中的一个即可。有没有一种方法可以组合起来,以便程序仅接受或? 编辑: 添加一个简单的程序以更清楚: 然后只能被调用。是否可以将argparse组排除在组之外,以便仅被调用? 问题答案: 编辑 :没关系。因为调用时必须创建一个选项,这是一个可怕的选择。那不是我的设计选择。如果您迫切需要此功能,可以尝试使用ConflictsOptionParser来实

  • 问题内容: 我以以下方式在我的android应用程序中使用: 将请求发送到URL并接收JSON响应。 解析JSON响应并获取所需的元素“结果”,它是一个JSON数组。 在此JSON数组的第i个元素上循环,然后继续所需的操作 码: 问题是当 我 达到50,然后引发 “ org.json.JSONException:索引50超出范围[0..50)” 异常。 JSONArray是否有任何限制? 问题答案

  • 使用Lucene libs,我需要对现有的搜索函数进行一些更改:假设以下对象: 名称:“端口对象1” 数据:"TCP(1)/1000-2000" 查询(或搜索文本)为“1142”,是否可以在数据字段内搜索“1142”并找到端口对象1,因为它指的是1000-2000之间的范围? 我只找到了数值范围查询,但这不适用于本例,因为我不知道范围。。。 参考以上代码。查询"1200"应该找到第一个doc。 L