【问题标题】:Is there a way to instantiate a comparable array, just establishing its length有没有办法实例化一个可比较的数组,只需确定它的长度
【发布时间】:2015-09-26 17:49:36
【问题描述】:

如果您愿意,我需要“提取”多个可比数组中的一个特定行。我知道行的索引,我只需要它的副本。我试着做类似的事情:

masterList 是我需要从中提取的多数组。

Comparable[] extracted = masterList[i];

但是,这仅设置提取到地址而不是实际内容。

有没有简单的方法可以做到这一点?

如果不能,我可以创建一个与 masterList[i] 行长度相同的空 Comparable[] 并循环添加到其中吗?请注意,我的程序一开始并不知道它需要的行的长度,因此我无法将其硬编码到程序中。

更新代码:

    Comparable[][] comparable = Arrays.copyOf(masterList, masterList[i].length);

当我运行这个时,我确实得到了一个我需要的长度的数组,但它都是地址,而不是值。所以我运行了一个循环来添加值

for(int i = 0; i<comparable.length; ++i){
        comparable[i] = queries[masterIndex];
    }

然而,这仍然返回地址列表。

【问题讨论】:

    标签: java arrays comparable


    【解决方案1】:

    如果不能,我可以创建一个与 masterList[i] 行长度相同的空 Comparable[] 并循环添加到其中吗?

    不需要。你可以这样做

    Comparable[] extracted = Arrays.copyOf(masterList[i], masterList[i].length);
    

    请注意,我的程序一开始并不知道它需要的行的长度,因此我无法将其硬编码到程序中。

    看,你也不需要硬编码长度。

    【讨论】:

    • @Suresh,你的回答比我的更简洁。 +1!
    • 这似乎应该可以工作,但是当我尝试打印出新提取的数组时,它仍然给我一个地址列表而不是值?
    • 你能更新你的新代码吗?不要修改当前的,只需粘贴新代码作为更新或提出新问题 :)
    • @Read_My_Feels991 Arrays.copyOf(masterList, 应该是 Arrays.copyOf(masterList[i], ?
    【解决方案2】:

    你试过 System.arraycopy 吗?

    Comparable extracted[] = new Comparable[masterList[i].length]
    System.arraycopy(masterList[i],0, extracted, 0, extracted.length);
    

    这应该对 extracted 中 masterList[i][j=0 to length-1] 处的元素进行浅拷贝。

    请注意,这里描述的两种解决方案都会抛出 NullPointerException 如果 master list[i] 恰好是 null。请务必检查这一点以避免令人讨厌的运行时意外。

    System.arraycopy 如果要复制数组的一部分,很方便。这是两种方法的good discussion

    希望这会有所帮助!

    【讨论】:

    • System.arrayCopy(masterList[i],extracted);不允许。说它对 Comparable[] 无效
    • 很抱歉。我在第一篇文章之后修复了该语法,只是将副本中的“C”更改为小写
    • 哇,你附加的那个链接是金牌 :)
    【解决方案3】:

    你可以使用clone(),因为所有的数组都是Cloneable

    Comparable[] extracted = masterList[i].clone();
    

    这将创建masterList[i] 的浅表副本(如果masterList[i]null,您将获得NullPointerException)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 2021-09-01
      • 2013-07-09
      相关资源
      最近更新 更多