2011-03-18 46 views
5

Có trường hợp sử dụng thực tế nào cho parallel arrays trong Java không? Dường như quá cồng kềnh để duy trì N mảng liên quan đến nhau.Tại sao sử dụng mảng song song trong Java?

Ví dụ:

int ages[] = {0,   17,  2,   52,   25}; 
String names[] = {"None", "Mike", "Billy", "Tom",  "Stan"}; 
int parent[] = {0,   3,   1,   0,   3}; 

Tôi chỉ có thể tạo ra một Person lớp và các đối tượng lưu trữ trong một mảng duy nhất. Sẽ có ít tốn kém hơn, nhưng dễ sử dụng phải không?

Trả lời

10

Mảng song song là sự lưu giữ từ các ngôn ngữ như Basic (bản gốc) không có cấu trúc dữ liệu khác với mảng. Thay vào đó, bạn nên xác định các đối tượng như bạn đề xuất.

1

Tạo biểu diễn lớp/đối tượng chỉ khi những gì bạn đang cố gắng đại diện có thể được giải thích tốt hơn làm đối tượng.

Hash Maps là một giải pháp khác. Ví dụ: thay vì mảng differnt cho độ tuổi và tên, nếu tên là duy nhất, bạn có thể sử dụng tên là khóa và tuổi làm giá trị.

+2

Bản đồ gần như xấu như mảng song song. –

+0

@stephan: tôi đồng ý, nhưng đôi khi, tôi thích sử dụng bản đồ khi mọi thứ đơn giản :) – Sujoy

+0

Tôi sẽ sửa lại điều đó. Trong một số khía cạnh, Maps tồi tệ hơn; ví dụ. họ chắc chắn là chậm hơn và nhiều bộ nhớ đói hơn cả hai mảng song song và cách tiếp cận ưa thích (các lớp tùy chỉnh). Bên cạnh cách tiếp cận Bản đồ sẽ trở nên cồng kềnh nếu bạn có nhiều hơn hai thuộc tính để liên kết ... như trong trường hợp này. –

1

Lớp học đẹp hơn, nhưng nếu trường hợp sử dụng bị thu hẹp, ví dụ: một cơ thể phương pháp, thật lãng phí khi tạo ra một phương pháp. Nếu bạn có một lớp học Pair, bạn có thể chuyên nó cho mục đích mà không cần tạo một lớp mới.

11

Ưu điểm thực sự duy nhất của mảng song song trong Java là một biện pháp (IMO cực đoan) để giảm phân bổ đối tượng và/hoặc sử dụng đống. Đối với một bộ sưu tập đủ lớn các đối tượng, 3 mảng sẽ chiếm ít không gian hơn và sử dụng ít đối tượng hơn một mảng các cá thể của một số lớp tùy chỉnh.

Phương pháp này thường là một ý tưởng tồi vì nó làm cho mã của bạn dễ vỡ hơn nhiều. Tạo và sử dụng lớp tùy chỉnh là cách tiếp cận tốt nhất trong hầu hết các trường hợp.

+3

Có, đây là điều cần ghi nhớ trong phát triển Android. Không phải tất cả các thiết bị Android đều bình đẳng, và điện thoại di động nói chung có nguồn lực hạn chế. Để trích dẫn từ lời khuyên về hiệu suất từ ​​tài liệu tham khảo của nhà phát triển Android, ''Nếu bạn cần triển khai một container chứa các đối tượng (Foo, Bar), hãy nhớ rằng hai mảng Foo [] và Bar [] song song thường tốt hơn nhiều hơn một mảng đối tượng tùy chỉnh (Foo, Bar). "' http://developer.android.com/training/articles/perf-tips.html – loeschg

Các vấn đề liên quan