Tôi đang viết một hàm để tổng hợp hai mảng (không nhất thiết là kích thước bằng nhau) trong Java và trả về kết quả.Làm thế nào để tổng hợp các mảng trong Java
Đây là nỗ lực của tôi:
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;
}
Nhưng tôi có một vài nhận xét mặc dù các lỗi biên dịch.
Tại sao chức năng này không nằm trong thư viện Java, vốn cực kỳ lớn?
Tôi được thúc đẩy sử dụng Generics, vì bạn sẽ sử dụng các mẫu trong C++.
Tôi lo lắng về việc nhận được bản sao sâu của dữ liệu đầu vào;
lhs
và `` rhs. Bất cứ ai có thể trấn an tôi về điều này? C++ cho phép tôi vượt qua một tham chiếu liên tục; và tôi chắc chắn sẽ biết.Sự khởi tạo của
T[]
có vẻ không hợp lệ với loại chung. Tôi đang thiếu gì?Trình biên dịch có tối ưu hóa số lặp lại
Math.max(lhs.length, rhs.length)
của tôi không?Trình biên dịch không thích
lhs[i] + rhs[i]
. Có lẽ bởi vì nó không biết loại T, nhưng C++ cho phép bạn làm điều này vì nó sẽ không cố gắng biên dịch một khuôn mẫu cho đến khi nó biết loại.
6) Bạn sẽ lấy một bản sao ra khi quay lại? Một lần nữa, trình biên dịch C++ sẽ không lấy thêm một bản sao.
Có lẽ tôi đã quá già để làm quen với Java ;-)
Quảng cáo 3) http://javadude.com/articles/passbyvalue.htm –
Thêm nội dung của hai mảng có độ dài không đồng đều không phải là một điểm chung hoạt động, tôi chưa bao giờ thực hiện nó. Nếu đó là sau đó những gì về chia hai mảng, trừ hai mảng, nâng cao một mục từ một mảng đến sức mạnh của vv vv vv khác Java cung cấp cho bạn các công cụ để làm điều đó nếu bạn cần nó –
'T' là không rõ tại thời gian chạy đó là lý do tại sao bạn không thể thực hiện 'new T []' – blank