配列マージしてソート

メモリ節約のためとかで、配列使ってコーディングしてて、以下のような関数つくった↓

  /** 2つの配列をマージしてソートした新しい配列かえす
   */
  def arraySort(array1:Array[Long],array2:Array[Long]):Array[Long] = {
    val newArray = new Array[Long]( array1.length + array2.length )
    
    System.arraycopy(array1 , 0 , newArray , 0 , array1.length )
    System.arraycopy(array2 , 0 , newArray , array1.length , array2.length )
    
    java.util.Arrays.sort( newArray )
    
    newArray
  }

ジェネリックにしてしまうと、プリミティブ型指定した場合に、boxingとかされると思ったので、あえてLong専用にしてみた。(どうせLongでしか使わない予定なので)
ていうか、そういう時のために、specializedアノテーションってあるんだろうけど、ちゃんと使い方知らないorz
単につければいいんだっけ?

あと、java.util.Arrays.sortってクイックソートって書いてあるけど、もとの2つの配列がそれぞれのソート済みだったら、もっとはやいアルゴリズムがあった気がする。*1

こういう本当にメモリを節約したい場合に、配列を使わないといけなるなるのは、JVM上に言語を構築したっていうのが不利になってる部分ですねぇ・・・。
LispにとってのListみたいに、基本のデータ構造がListで、それが言語組み込みだったら、そういうことあまり気にしなくていいんだろうけど・・・

ちなみに、逆コンパイルすると、ほんとそのまんま↓

    public long[] arraySort(long array1[], long array2[])
    {
        long newArray[] = new long[array1.length + array2.length];
        System.arraycopy(array1, 0, newArray, 0, array1.length);
        System.arraycopy(array2, 0, newArray, array1.length, array2.length);
        Arrays.sort(newArray);
        return newArray;
    }

*1:そもそも、最初に配列つくってコピーしてる時点でちょっと無駄だけど、そこまで全部実装するのめんどくさかったので。ていうか、Apache commonとかで、Javaのそういうユーティリティないんかな?そこまで、Javaすごい詳しいわけではないからわからん(´・ω・`)