Самый эффективный метод для блокировки / распаковки многомерных примитивных массивов - PullRequest
1 голос
/ 05 апреля 2011

Является ли этот самый эффективный метод для блокировки / распаковки многомерных примитивных массивов в Java без использования внешней библиотеки?

private Float[][] toFloatArray(float[][] values)
{
   Float[][] objArray = new Float[values.length][values[0].length];

   for (int i = 0; i < values.length; i++)
   {
      for (int j = 0; j < values[0].length; j++)
      {
         objArray[i][j] = values[i][j];
       }
   } 

   return objArray;
}

Что наиболее эффективно при использовании внешней библиотеки?

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

Никакой магии здесь: вот как apache-commons делает это, когда вы используете их библиотеку:

public static short[] toPrimitive(Short[] array) {
    if (array == null) {
        return null;
    } else if (array.length == 0) {
        return EMPTY_SHORT_ARRAY;
    }
    final short[] result = new short[array.length];
    for (int i = 0; i < array.length; i++) {
        result[i] = array[i].shortValue();
    }
    return result;
}

source

2 голосов
/ 05 апреля 2011

Не думаю, что сделал бы так.Это не удастся, если массив на самом деле не "прямоугольный".Я бы сделал что-то вроде:

private Float[][] toFloatArray(float[][] values)
{
   Float[][] objArray = new Float[values.length][];

   for (int i = 0; i < values.length; i++)
   {
      objArray[i] = new Float[values[i].length];
      for (int j = 0; j < values[i].length; j++)
      {
         objArray[i][j] = values[i][j];
      }
   } 

   return objArray;
}

Вы могли бы быть в состоянии микрооптимизировать, удалив доступ к промежуточному массиву:

private Float[][] toFloatArray(float[][] values)
{
   Float[][] objArray = new Float[values.length][];

   for (int i = 0; i < values.length; i++)
   {
      float[] subSource = values[i];
      Float[] subDest = new Float[subSource.length];
      objArray[i] = subDest;
      for (int j = 0; j < subSource.length; j++)
      {
         subDest[j] = subSource[j];
      }
   } 

   return objArray;
}

... но яЯ не удивлюсь, если узнаю, что хорошие JIT могут оптимизировать в любом случае.(Возможно, не для исходного массива, который может меняться за кулисами, конечно ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...