【问题标题】:Concatenate Array in Java by Reference通过引用在 Java 中连接数组
【发布时间】:2017-03-12 16:37:49
【问题描述】:

我想像这样通过引用连接Java中的数组。

int[] a = new int[] {1,2,3};
int[] b = new int[] {4,5,6};
int[] ab = concatArrayByReference(a,b); //Function to be defined

现在如果我这样做了

a[2] = 90;

ab 应该等于 {1,2,90,4,5,6}

这在 Java 中是否可行,如何通过引用拆分数组?

我想要这个主要是出于性能原因,我想避免每次连接两个非常大的数组时都复制它们。

编辑:这似乎在 Java 中是不可能的,那么我将如何进行 List 的高性能实现以使其成为可能?

【问题讨论】:

  • 你认为“通过引用”是什么意思?
  • a[0] 应该与 ab[0] 引用相同的内存位置
  • 不,你不能用数组来做这件事。您只能通过 List 的特殊实现来做到这一点。
  • @Julian 这并不是这里要问的。关键是更新底层数组应该更新串联数组。

标签: java arrays performance reference


【解决方案1】:

不,这在 Java 中是不可能的。

【讨论】:

  • 那么有没有可能的解决方法?每次复制数百万个条目似乎根本不合理......
  • 取决于您要解决的问题。您可以分配串联数组并拥有一个在数组范围内定义视图的类。
  • 这很难概括,特别是如果我继续连接多个数组。我将如何存储和访问这些数组?我应该只使用数组的 arrayList 并使用 getter 来“伪造”索引吗?
  • 你可以使用 LinkedList,或者编写你自己的实现。我没有看到其他方法
  • 您想“解决什么问题”?你为什么要使用数组来保存“数百万个条目”? “看起来”是一个主观术语;你正在处理的客观现实是什么?你是如何确定你要解决的问题的?您有什么证据表明问题的严重性?
【解决方案2】:

这在 java 中是不可能的。在 java 中,您可以通过引用仅发送对象,例如:

Obj o1= new Obj(1), o2 =..., o6 = new Obj(6);
Obj [] a= {o1, o2, o3};
Obj [] b= {o4, o5, o6};
Obj [] ab = SomeMergeFuncNoCopyConstractor(a, b); //{o1, o2, o3, o4, o5, o6}
o3.setValue(90);
Obj.printArray(a); //1,2,90
Obj.printArray(ab);//1,2,90,4,5,6

在某些情况下,这可能会更有效,具体取决于使用情况。但是你将不得不使用对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2014-09-04
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2014-10-15
    • 2019-02-03
    相关资源
    最近更新 更多