2010-12-28 41 views
26

Tôi muốn tạo một mảng có chứa các phần tử ArrayList < String>.Tạo một mảng các phần tử ArrayList <String>

Tôi đã thử

ArrayList<String> name[] = new ArrayList<String>()[]; 

nhưng điều đó dường như không làm việc.

+0

Bạn muốn một arraylis t của arraylists. Tại sao bạn sẽ sử dụng một mảng trong một ý nghĩa và một mảng trong những người khác? – Falmarri

+2

Tôi biết có bao nhiêu yếu tố sẽ có. Vẫn còn tốt hơn khi sử dụng danh sách mảng của arraylists? – sighol

+0

Đây là bản sao của: http://stackoverflow.com/questions/2792731/how-to-do-an-array-of-hashmaps/2792743#2792743 – Tom

Trả lời

33

Bạn không thể tạo một mảng thuộc loại chung.

Thay vào đó, bạn có thể tạo ArrayList<ArrayList<String>>.

+0

Xin chào, trong trường hợp đó, làm cách nào có thể thực hiện được ở đây? https://stackoverflow.com/questions/22747528/how-to-create-an-array-of-arraylists-in-java – Harsha

11

Cách đúng là:

ArrayList<String> name[] = new ArrayList[9]; 

Tuy nhiên, điều này sẽ không làm việc một trong hai, kể từ khi bạn không thể làm cho một mảng với một kiểu chung chung, những gì bạn đang cố gắng làm là một ma trận, và điều này nên được thực hiện như thế này:

String name[][]; 
+3

nhưng DOES đầu tiên hoạt động, tuy nhiên nó hiển thị cảnh báo an toàn loại. –

2
ArrayList<ArrayList<String>> name= new ArrayList<ArrayList<String>>(/*capacity*/); 
2

Nếu bạn làm muốn có một mảng của ArrayList, bạn sẽ phải khởi tạo mỗi vị trí của mảng riêng lẻ:

int size = 9; // 9 is just an example 
// you can remove the annotation, but you'll be warned: 
// Type safety: The expression of type ArrayList[] needs unchecked conversion 
// to conform to ArrayList<String>[] 
@SuppressWarnings("unchecked") 
ArrayList<String> name[] = new ArrayList[ size]; 
for(int i = 0; i < size; i++) { 
    name[ i] = new ArrayList<String>(); 
} 
5

Đây không phải là OO phù hợp và loại mã này được triển khai rất giống nhau. Nếu bạn cần làm điều đó, có thể bạn đã làm điều gì sai. Nếu mã không phải của bạn, người làm cho nó có thể đã làm điều gì đó sai trái.

Nếu bạn biết có bao nhiêu phần tử ở đó (hoặc thậm chí nếu bạn không có), tại sao không sử dụng Map<Integer,List<String>>?

+1

Sử dụng Bản đồ là một ý tưởng hay! Giúp tôi, cảm ơn bạn! – Progtopus

9

Tôi biết điều này hơi cũ nhưng tôi sẽ trả lời điều này cho các lượt xem trong tương lai.

Nếu bạn thực sự muốn có một cấu trúc ArrayList<String>[], bạn chỉ có thể tạo ra một lớp mà kéo dài ArrayList và thực hiện một mảng của lớp đó:

public class StringArrayList extends ArrayList<String>{} 

Và trong thực hiện của bạn:

ArrayList<String> name[] = new StringArrayList[9]; 

Đây là mẫu:

package testspace.arrays; 

import java.util.List; 

public class TestStringArray { 

    public static void main(String[] args) { 
     List<String>[] arr = new StringArrayList[10]; 
     for(int i = 0; i < arr.length; i++){ 
      // CANNOT use generic 'new ArrayList<String>()' 
      arr[i] = new StringArrayList(); 
      for(int j = 0; j < arr.length; j++){ 
       arr[i].add("list item #(" + j + "|" + i + ")"); 
      } 
     } 

     StringBuilder sb = new StringBuilder(); 
     for(final List<String> list : arr){ 
      for(final String str : list){ 
       sb.append(str + " "); 
      } 
      sb.append("\n"); 
     } 
     System.out.println(sb.toString()); 
    } 

} 

LƯU Ý Bạn sẽ nhận được một lỗi thời gian chạy nếu bạn sử dụng này để thay thế: arr[i] = new ArrayList<String>()

0

Tôi đã cố gắng này mà không có lỗi, mặc dù tôi đã putted một giới hạn trong mảng ít hơn số lượng mục được thêm vào:

package Testes.src; 

import java.util.ArrayList; 
import java.util.List; 

public class Testes { 

    private List<String> name=new ArrayList<String>(1); 

    public Testes(){ 
     for (int i = 1; i <= 100; i++) { 
      name.add("Teste"+Integer.toString(i)); 
     } 
     for (int i = 0; i < name.size(); i++) { 
      System.out.println(name.get(i)); 
     } 
    } 
    public static void main(String [] args) 
    { 
     Testes t1=new Testes(); 
    } 
} 
0

Tôi biết đây là một bài đăng cũ, nhưng ai đó vừa hỏi cùng một câu hỏi và vì không ai đề cập đến giải pháp sau đây.

Một cách để giải quyết nó có thể giống như mảng 2d (câu hỏi gần đây về mảng 2d hoặc ArrayLists) của đối tượng và sau đó bạn có thể đặt tham chiếu ArrayList trong mảng. Tôi đã không thử nghiệm nó, nhưng một cái gì đó như thế này sẽ làm việc.

Object [][] data = new Object[5][5]; 
data[0][0] = new ArrayList<String>(); // etc . . . 
0

Bạn có thể thử này:

ArrayList[] arr=new ArrayList[5]; 
for(int i=0;i<5;i++) 
    arr[i]=new ArrayList<String>(); 
arr[1].add("35"); 
arr[1].add("ME"); 
arr[1].add("HELLO"); 
System.out.println(arr[1]); 

Output:

[35, ME, HELLO] 
0
// This is the not correct way 
ArrayList<String> name[] = new ArrayList<String>()[]; 

// This is the correct way 
ArrayList<String> list[] = new ArrayList[2]; 

list[0] = new ArrayList(); 
list[1] = new ArrayList(); 

list[0].add("Some String 11"); 
list[0].add("Some String 22"); 

list[1].add("Some String 1111"); 
list[1].add("Some String 2222"); 
+2

Điều này đã được trả lời 7 năm trước. Câu trả lời của bạn mang lại những giá trị mới nào? –

0

Array của ArrayLists, ví dụ với Loops

//Declare 
Object[] arrayLists = new Object[size];  

//Fill 
for (int j=0; j < size; j++) { 
    arrayLists[k]= generateAnArrayList(j); //or whatnot 
} 

//Usage 
for (int j=0; j < size; j++) { 
    ArrayList<Long> al = (ArrayList<Long>) arrayLists[j]; 
    //do something here 
} 
Các vấn đề liên quan