Я пишу функцию, чтобы суммировать два массива (необязательно равного размера) в Java и возвращать результат.Как суммировать массивы в Java
Вот моя попытка:
public static <T> T[] sumArrays(T[] lhs, T[] rhs)
{
T[] out = new T[Math.max(lhs.length, rhs.length)];
for (int i = 0; i < Math.max(lhs.length, rhs.length); ++i){
if (i < Math.min(lhs.length, rhs.length)){
out[i] = lhs[i] + rhs[i];
} else if (i < lhs.length){
out[i] = lhs[i];
} else /* if (i < rhs.length)*/{
out[i] = rhs[i];
}
}
return out;
}
Но у меня есть несколько замечаний несмотря на то ошибки компиляции.
Почему эта функция не существует в библиотеке Java, которая чрезвычайно велика?
Мне было мотивировано использовать дженерики, так как вы использовали бы шаблоны в C++.
Я беспокоюсь о получении глубоких копий входных данных;
lhs
и `` rhs. Может ли кто-нибудь успокоить меня по этому поводу? C++ позволяет мне передавать постоянную ссылку; и я точно знаю.Мгновенное включение
T[]
out представляется незаконным с использованием типового типа. Что мне не хватает?Будет ли компилятор оптимизировать мой повторный
Math.max(lhs.length, rhs.length)
?Компилятор не любит
lhs[i] + rhs[i]
. Предположительно, потому что он не знает тип T, но C++ позволяет это сделать, поскольку он не будет пытаться скомпилировать шаблон до тех пор, пока он не узнает тип.
6) Собираетесь ли вы получить глубокую копию при возвращении? Опять же, компиляторы C++ не берут дополнительную копию.
Может быть, я слишком стар, чтобы привыкнуть к Java ;-)
Ad 3) http://javadude.com/articles/passbyvalue.htm –
Добавление содержимого двух массивов неравномерной длины не является обычным Я никогда этого не делал. Если бы это было то, что было разделение двух массивов, вычитание двух массивов, повышение одной записи от одного массива до мощности другого и т. Д. И т. Д. И т. Д. Java дает вам инструменты для этого, если вам это нужно. –
'T' неизвестно во время выполнения поэтому вы не можете делать 'new T []' – blank