2013-03-09 20 views
7

Trong mã java của tôi, tôi cố gắng xây dựng một danh sách các ArrayList, mã của tôi là như sau,[Ljava.lang.Object; không thể chuyển sang [Ljava.util.ArrayList;

private ArrayList<Integer>[] listoflist; 
listoflist = (ArrayList<Integer>[]) new Object[875715]; 

Tuy nhiên, khi tôi biên dịch mã, trình biên dịch vẫn tiếp tục nói rằng

[Ljava.lang.Object; không thể chuyển sang [Ljava.util.ArrayList;

Tôi có thể hỏi tại sao tôi không thể truyền Object [] đến ArrayList []?

+8

Tại sao bạn * mong đợi * để có thể? –

+4

Bởi vì bạn đang cố gắng để đúc một loại không tham số: 'Đối tượng', để một loại tham số:' ArrayList '. – Rob

+0

Và bạn mong đợi điều gì? –

Trả lời

4

Bạn nói rằng bạn đang cố gắng xây dựng một danh sách các ArrayLists. Nhưng ... bạn đang cố gắng sử dụng một mảng để làm điều đó ... Tại sao không chỉ sử dụng ArrayList khác? Nó thực sự khá dễ dàng:

private List<List<Integer>> listoflist = new ArrayList<ArrayList<Integer>>(); 

Dưới đây là một ví dụ của việc sử dụng nó:

ArrayList<Integer> list1 = new ArrayList<Integer>(); 
list1.add(Integer.valueOf(3)); 
list1.add(Integer.valueOf(4)); 
ArrayList<Integer> list2 = new ArrayList<Integer>(); 
list2.add(Integer.valueOf(6)); 
list2.add(Integer.valueOf(7)); 
listoflist.add(list1); 
listoflist.add(list2); 

Nói ArrayList<ArrayList<Integer>> rất nhiều lần là kinda lạ, vì vậy trong Java 7 xây dựng chỉ có thể new ArrayList<>(); (nó suy luận kiểu từ biến bạn đang gán cho nó).

+0

cảm ơn bạn, câu trả lời tuyệt vời! – Bpache

4

Java là strong typed language - do đó bạn không thể chỉ đơn giản là truyền một loại này sang loại khác. Tuy nhiên, bạn có thể chuyển đổi chúng.

Trong trường hợp Object[] để List chỉ cần sử dụng

Object[] arr = new Object[]{...}; 
List<Object> list = Arrays.asList(arr); 

và nếu bạn muốn sử dụng nó như một ArrayList, ví dụ nếu bạn muốn thêm một số yếu tố khác, chỉ cần quấn nó lại

ArrayList<Object> arrList = new ArrayList<Object>(Arrays.asList(arr)); 
+0

cảm ơn bạn rất nhiều. – Bpache

-2

định nghĩa nó trong dòng như sau, trình biên dịch không phàn nàn

private ArrayList[] listoflist = (ArrayList<Integer>[]) new Object[10]; 
+2

Bạn sai, đây chính là câu lệnh tương tự nhưng được viết khác nhau, với cùng cảnh báo: 'Loại an toàn: Bỏ chọn đối tượng từ Object [] đến ArrayList []', và lỗi tương tự: '[Ljava.lang.Object ; không thể chuyển sang [Ljava.util.ArrayList; ' – Rob

+0

@Rob: đã hiểu. Nhưng khi tôi cố gắng thực hiện nó thì nó đã gây ra lỗi. Nhưng sau khi một dòng, nó đưa ra cảnh báo mà bạn đã đề cập. – AmitG

1

Bạn có thể tạo một ArrayList n chiều, giống như một mảng không gian thứ n, bằng cách đặt ArrayLists vào ArrayLists.

Dưới đây là ví dụ có 3 thứ nguyên để hiển thị khái niệm.

public static void main(String args[]){ 
    ArrayList<ArrayList<ArrayList<Integer>>> listOfListOfList = new ArrayList<ArrayList<ArrayList<Integer>>>(); 
    int firstDimensionSize = 3; 
    int secondDimensionSize = 4; 
    int thirdDimensionSize = 5; 

    for (int i = 0; i < firstDimensionSize; i++) { 
     listOfListOfList.add(new ArrayList<ArrayList<Integer>>(vertices)); 
     for (int j = 0; j < secondDimensionSize; j++) { 
      listOfListOfList.get(i).add(new ArrayList<Integer>()); 
      for(int k = 0; k < thirdDimensionSize; k++) { 
       listOfListOfList.get(i).get(j).add(k); 
      } 
     } 
    } 
} 

Lưu ý rằng bạn có thể để <> rỗng sau khi ArrayList mới <>. Java sẽ suy ra loại (không có vấn đề như thế nào lồng nhau), kể từ java 7 tôi tin. Tôi chỉ viết chúng xuống trong ví dụ để cho thấy loại bạn đang xử lý ở mọi cấp độ, để làm cho ví dụ rõ ràng hơn. Bạn vẫn có thể viết chúng xuống để làm cho mã của bạn dễ đọc hơn.

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