2012-03-03 81 views
6

Tôi biết rằng đối với mảng bạn có thể thêm một phần tử trong một mảng hai chiều theo cách này:Thêm phần tử trong hai ArrayList chiều

array[0][1] = 17; //just an example 

Làm thế nào tôi có thể làm điều tương tự với ArrayList?

+0

@Joey: bạn nghi ngờ gì? Vui lòng xem mã trong câu trả lời vì nó sử dụng get (...). Get (...). Làm thế nào điều này không cho phép bình luận của tôi ở trên? –

+1

Bất cứ điều gì 'get (1)' trả về, gán 17 cho nó sẽ không thêm nó vào Danh sách - và sẽ không biên dịch sao, chắc chắn? – DNA

+1

@ Joe: Vâng, bạn nói đúng và tôi đã không suy nghĩ. Không phải là đủ máu trong hệ thống rượu của tôi ngay bây giờ. –

Trả lời

6
myList.get(0).set(1, 17); 

có thể?

này giả định một lồng nhau ArrayList, tức là

ArrayList<ArrayList<Integer>> myList; 

Và để chọn vào lựa chọn của bạn từ: Đây chuyển quyền một giá trị cho một vị trí cụ thể trong danh sách bên trong, nó không thêm một . Nhưng ví dụ mã của bạn cũng vậy, vì mảng có kích thước cố định, vì vậy bạn phải tạo chúng theo đúng kích cỡ và sau đó gán giá trị cho các vùng yếu tố riêng lẻ.

Nếu bạn thực sự muốn thêm một phần tử, thì dĩ nhiên đó là .add(17), nhưng đó không phải là mã của bạn, vì vậy tôi đã đi với mã ở trên.

+1

Tôi rất vui vì James Gosling đã khinh miệt các tình trạng quá tải của nhà điều hành. –

+2

... nơi nhận được (0) trả về một Danh sách, tất nhiên. Cũng lưu ý rằng 17 được autoboxed để 'new Integer (17)' – DNA

1
outerList.get(0).set(1, 17); 

với outerList là List<List<Integer>>.

Hãy nhớ rằng mảng 2 chiều không tồn tại. Chúng thực sự là mảng hoặc mảng.

1
ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); 
data.add(new ArrayList<String>()); 
data.get(0).add("String"); 

ArrayList<ArrayList<String>> chứa các yếu tố của loại ArrayList<String>

Mỗi phần tử phải được khởi tạo

Những yếu tố này bao gồm các yếu tố của loại String

Để lấy lại String "String" trong 3 dòng ví dụ: bạn sẽ sử dụng

String getValue = data.get(0).get(0); 
1
ArrayList<ArrayList<Integer>> FLCP = new ArrayList<ArrayList<Integer>>(); 
FLCP.add(new ArrayList<Integer>()); 
FLCP.get(0).add(new Integer(0)); 

Mỗi phần tử phải được khởi tạo. Ở đây ArrayList bên ngoài có phần tử ArrayList, và trước tiên bạn cần phải thêm một phần tử để tham chiếu nó bằng cách sử dụng phương thức get.

Một số ghi chú bổ sung; sau khi đọc các câu trả lời và nhận xét khác:

1> Mỗi phần tử phải được khởi tạo; khởi tạo khác với khởi tạo (tham khảo flexJavaMysql 's answer)

2> Trong Java, mảng 2 chiều tồn tại; C# không có mảng 2D (tham khảo JB Nizet 's answer)

0

cách tôi tìm thấy tốt nhất và thuận lợi cho tôi là khai báo urd mảng 2d và sau đó cũng là mảng đơn chiều nornal.

rồi điền vào danh sách '1D'array và sau đó thêm 1D vào danh sách mảng 2D.

1darraylist.add("string data"); 
2darraylist.add(idarraylist); 

điều này sẽ hoạt động miễn là vấn đề của bạn chỉ đơn giản là thêm vào các yếu tố vào danh sách. nếu bạn muốn thêm chúng vào các vị trí cụ thể trong danh sách, the .get(). set(); là những gì bạn muốn dính vào.

0
String[] myList = {"a","b","c","d"}; 
ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); 
data.add(new ArrayList<String>()); 
int outerIndex =0; 
int innerIndex =0; 
for (int i =0; i<list.length; i++) { 
    data.get(outerIndex).add(innerIndex, list[i]); 
    innerIndex++; 
} 
System.out.println(data); 

Đơn giản cho vòng lặp để thêm dữ liệu vào một mảng nhiều chiều.
Đối với mỗi chỉ số bên ngoài bạn cần phải thêm

data.add(new ArrayList<String>()); 

sau đó tăng chỉ số bên ngoài, và đặt lại chỉ mục bên trong.
Điều đó trông giống như thế này.

public static String[] myList = {"a", "b","-","c","d","-","e","f","-"}; 

public static ArrayList<ArrayList<String>> splitList(String[] list) { 

    ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); 
    data.add(new ArrayList<String>()); 
    int outerIndex =0; 
    int innerIndex =0; 
    for (int i=0; i<list.length; i++) { 
     System.out.println("will add: " + list[i]); 
     if(!list[i].contains("-")) { 
      System.out.println("outerIndex: " + outerIndex +" innerIndex: "+ innerIndex); 
      data.get(outerIndex).add(innerIndex, list[i]); 
      innerIndex++; 
     } else { 
      outerIndex++; // will move to next outerIndex 
      innerIndex = 0; // reset or you will be out of bounds 
      if (i != list.length-1) { 
       data.add(new ArrayList<String>()); // create an new outer index until your list is empty 
      } 
     } 
    } 
    return data; 
} 
public static void main(String[] args) { 
    System.out.println(splitList(myList)); 
} 
Các vấn đề liên quan