ヒープ上に新しい配列を作成せずにJavaで配列のセグメントを取得する質問する

ヒープ上に新しい配列を作成せずにJavaで配列のセグメントを取得する質問する

Java で配列のセグメントを返すメソッドを探しています。例としては、バイト配列の 4 番目と 5 番目のバイトを含むバイト配列を取得することが挙げられます。そのためだけにヒープ メモリに新しいバイト配列を作成したくはありません。現在、次のコードがあります。

doSomethingWithTwoBytes(byte[] twoByteArray);

void someMethod(byte[] bigArray)
{
      byte[] x = {bigArray[4], bigArray[5]};
      doSomethingWithTwoBytes(x);
}

doSomething(bigArray.getSubArray(4, 2))たとえば、オフセットが 4、長さが 2 になるようにする方法があるかどうか知りたいです。

ベストアンサー1

免責事項: この回答は質問の制約に準拠していません:

そのためにヒープメモリ内に新しいバイト配列を作成する必要はありません。

正直に言うと、私の回答は削除に値すると思います。@unique72 の回答は正しいです。この編集をしばらくそのままにして、その後この回答を削除します。


追加のヒープ割り当てなしで配列でこれを直接行う方法はわかりませんが、サブリスト ラッパーを使用する他の回答では、ラッパーのみに追加の割り当てがあり、配列には割り当てられていないため、大きな配列の場合に役立ちます。

とはいえ、簡潔さを求めるなら、ユーティリティメソッドArrays.copyOfRange()Java 6 (2006 年後半?) で導入されました。

byte [] a = new byte [] {0, 1, 2, 3, 4, 5, 6, 7};

// get a[4], a[5]

byte [] subArray = Arrays.copyOfRange(a, 4, 6);

おすすめ記事