2012-02-29 35 views
8

Trong bình thường array list khởi, Chúng tôi sử dụng để xác định kiểu chung chung như sau,loại Generic cho ArrayList của ArrayLists

List<String> list1 = new ArrayList<String>(); 

Nhưng trong trường hợp của ArrayList của ArrayLists, Làm thế nào chúng ta có thể xác định loại generic của nó?

Mã cho array list danh sách mảng như sau:

ArrayList[] arr=new ArrayList[n]; 
for(int i=0;i<n;i++) 
{ 
arr[i]=new ArrayList(); 
} 

Chỉ cần chia sẻ các cú pháp, nếu ai có ý tưởng về nó ..!

+3

đây là một ** mảng ** của đối tượng ArrayList –

+0

Cảm ơn bạn Andreas .., Cho đến bây giờ tôi chỉ nghĩ rằng nó là một Arraylist của ArrayLists, bây giờ tôi đã nhận nó, rằng nó là một mảng của đối tượng ArrayList ..! Ok sau đó làm thế nào chúng ta có thể xác định loại chung cho rằng ..? Bất kỳ ý tưởng ..? –

+0

Xem câu trả lời của tôi. Điều đó là không thể. Không có mảng chung với java. –

Trả lời

12

Bạn chỉ có thể làm

List<List<String>> l = new ArrayList<List<String>>(); 

Nếu bạn cần một loạt các danh sách, bạn có thể làm

List<String>[] l = new List[n]; 

và an toàn lờ đi hoặc ngăn chặn các cảnh báo.

+1

"Bỏ qua hoặc bỏ qua cảnh báo một cách an toàn."Tôi không nghĩ rằng việc viết mã mà cố tình gây ra cảnh báo sẽ được coi là" an toàn ". –

+1

@ TomHawtin-tackline nó khá an toàn.Mảng mới không chứa các đối tượng danh sách, do đó nó không chứa danh sách không phải là' Danh sách '. Trình biên dịch không đủ thông minh để nhận ra điều này (Và nó không được phép thông minh hơn, bằng spec.) Nếu bạn muốn một mảng các danh sách (để tránh không gian hoặc không gian thừa của ArrayList, nói), có Không có cách nào để làm điều này mà không có cảnh báo –

+0

Bạn phải dựa vào một dòng lý luận thay vì để cho trình biên dịch đối phó với vô nghĩa./Vì nó xảy ra 'l' có thể có một' List 'được thêm vào, mặc dù các trình biên dịch gần đây hơn sẽ cung cấp cho bạn một cảnh báo khác ("rawtypes") –

4

Nếu bạn (thực sự) muốn có một danh sách liệt kê, thì đây là việc kê khai chính xác:

List<List<String>> listOfLists = new ArrayList<List<String>>(); 

Chúng ta không thể tạo ra các mảng chung. new List<String>[0] là lỗi kết hợp.

0

Something như thế này:

List<List<Number>> matrix = new ArrayList<List<Number>>(); 
for (int i = 0; i < numRows; ++i) { 
    List<Number> row = new ArrayList<Number>(); 
    // add some values into the row 
    matrix.add(row); 
} 

Hãy loại danh sách bất cứ điều gì bên trong bạn muốn; điều này chỉ nhằm mục đích minh họa.

0

Bạn đang nói về một mảng danh sách (ArrayLists cụ thể hơn). Java không cho phép tạo mảng chung (trừ khi sử dụng các ký tự đại diện, xem đoạn tiếp theo). Vì vậy, bạn nên quên sử dụng Generics cho mảng, hoặc sử dụng một danh sách thay vì một mảng (nhiều giải pháp được đề xuất cho việc này).

Trích từ IBM article:

Một hệ quả của thực tế là mảng là hiệp biến nhưng Generics là không phải là bạn không thể nhanh chóng một mảng của một kiểu generic (Liệt kê mới [3] là bất hợp pháp), trừ trường hợp loại đối số là một ký tự đại diện không bị chặn (danh sách mới <?> [3] là hợp pháp).

0

Bạn đang ở bên phải: Điều này có vẻ điên rồ. (May nó một Bug ...) Thay vì dùng

ArrayList<String>[] lst = new ArrayList<String>[]{}; 

Sử dụng:

ArrayList<String>[] list1 = new ArrayList[]{}; 

sẽ làm việc cho tờ khai, ngay cả khi bạn không mô tả một congrete chung!

+1

tại sao bạn tạo một lớp ẩn danh? – newacct

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