我正在寫一個函數來在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 ;-)
廣告3)http://javadude.com/articles/passbyvalue.htm –
添加兩個不均勻長度數組的內容並不是一個普通的活動,我從來沒有做過。如果是這樣的話,那麼分開兩個數組,減去兩個數組,從一個數組增加一個數組到另一個數組的等等等等等等等等。Java給你工具來做它,如果你需要的話 –
'T'在運行時是未知的這就是爲什麼你不能做'new T []' – blank