Я хочу создать массив, содержащий элементы ArrayList <String> .
Я пробовал
ArrayList<String> name[] = new ArrayList<String>()[];
но это не работает.
Я хочу создать массив, содержащий элементы ArrayList <String> .
Я пробовал
ArrayList<String> name[] = new ArrayList<String>()[];
но это не работает.
Вы не можете создать массив общего типа.
Вместо этого вы можете создать ArrayList<ArrayList<String>>
.
Правильный способ:
ArrayList<String> name[] = new ArrayList[9];
Однако это тоже не сработает, так как вы не можете создать массив с общим типом, то, что вы пытаетесь сделать, это матрица, и это должно быть выполнено следующим образом:
String name[][];
Я знаю, что это немного устарело, но я буду отвечать на это в любом случае для будущих просмотров.
Если вам действительно нужна структура ArrayList<String>[]
, вы можете просто создать класс, который расширяет ArrayList и создает массив этого класса:
public class StringArrayList extends ArrayList<String>{}
И в вашей реализации:
ArrayList<String> name[] = new StringArrayList[9];
Вот пример:
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());
}
}
ПРИМЕЧАНИЕ Вы получите ошибку времени выполнения, если вы используете это вместо: arr[i] = new ArrayList<String>()
Это не правильно OO, и этот код очень связан с реализацией. Если вам нужно это сделать, возможно, вы сделали что-то не так. Если код не принадлежит вам, человек, который его сделал, вероятно, сделал что-то неправильно.
Если вы знаете, сколько элементов есть (или даже если вы этого не сделали), почему бы не использовать Map<Integer,List<String>>
?
ArrayList<ArrayList<String>> name= new ArrayList<ArrayList<String>>(/*capacity*/);
Если вам нужен массив ArrayList
, вам нужно будет инициализировать каждую позицию массива индивидуально:
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>();
}
Я пробовал это без ошибки, хотя я поместил ограничение в массив меньше количества добавленных элементов:
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();
}
}
Я знаю, что это старый пост, но кто-то просто задал тот же вопрос, и поскольку никто не упомянул о следующем решении, вот оно.
Один из способов обойти это может быть чем-то вроде массива 2d (недавний вопрос был о 2d массиве или ArrayLists) объектов, а затем вы должны были бы поместить ссылки ArrayList в массив. Я не тестировал его, но что-то вроде этого должно работать.
Object [][] data = new Object[5][5];
data[0][0] = new ArrayList<String>(); // etc . . .
Вы можете попробовать следующее:
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]);
Вывод:
[35, ME, HELLO]
// 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");