Передать массив по ссылке из определенного индекса на - PullRequest
0 голосов
/ 24 мая 2018

В c вы можете передать массив по ссылке из определенного индекса (скажем, i), просто передав адрес элемента i-th.

Теперь мне было интересно, могу ли я создать подобную структуру для работы в Java.В настоящее время я внедряю встроенный radix-4 fft в java, для которого я делаю рекурсивный вызов только на части исходного массива данных.

Итак, скажем, у меня есть массив данных a= [1,2,3,4,5,6,7,8], я хочу сделать 4 вызова, каждый из которых получает 4-й из a в качестве параметра, так что я могу выполнять изменения на месте.

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Вы не можете сделать это "из коробки".

Вы можете создать класс "представление массива", который дает доступ только к определенному диапазону.

Но вы можете 't создавать вложенные массивы без выделения памяти и копирования записей.

0 голосов
/ 24 мая 2018

Иметь метод, который принимает массив и начальный и конечный индекс в качестве параметров.Это довольно распространенная идиома, но, конечно, ожидается, что метод будет вести себя хорошо и не будет считываться вне допустимых индексов.

Это простой, производительный и в значительной степени единственный реалистичный способ в Java.Все, о чем вам нужно беспокоиться, это ошибочные методы, повреждающие массив, но это не должно произойти, верно?

0 голосов
/ 24 мая 2018

Это не может быть сделано в Java с одномерным массивом напрямую.

Вы можете сделать это с многомерным массивом.

Например:

int[][] a = {{1,2},{3,4},{5,6},{7,8}};

Теперь вы можете передать a[i] в ваш метод, который может изменять его элементы.

Или вы можете создать List представление массива, используя Arrays.asList().Затем вы можете использовать subList(), чтобы передать части этого List в ваш метод и изменить эти части.Эти изменения будут отражены в исходном массиве.

Например:

public static void changeSubList(List<Integer> list) {
    list.set (0, 150);
}

public static void main (java.lang.String[] args)
{
    Integer[] array = {1,2,3,4,5,6,7,8};
    List<Integer> list = Arrays.asList (array);
    changeSubList(list.subList (0, 2));
    changeSubList(list.subList (2, 4));
    changeSubList(list.subList (4, 6));
    changeSubList(list.subList (6, 8));
    System.out.println (Arrays.toString (array));
}

Вывод:

[150, 2, 150, 4, 150, 6, 150, 8]

Единственная проблема заключается в том, что вы не можете использоватьмассив примитивов.

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