我想创建一个如下所示的arraylist数组:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
但它没有编译。我怎么能这样做?
答案 0 :(得分:128)
“您无法创建参数化类型数组”
相反,你可以这样做:
ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);
正如Tom Hawting所说 - 强调,这样做更好:
List<List<Individual>> group = new ArrayList<List<Individual>>(4);
答案 1 :(得分:86)
正如其他人提到的那样,最好使用另一个列表来存储ArrayList,但是如果你必须使用数组:
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
答案 2 :(得分:72)
这有效:
ArrayList<String>[] group = new ArrayList[4];
答案 3 :(得分:23)
您可以创建一个扩展ArrayList的类
class IndividualList extends ArrayList<Individual> {
}
然后创建数组
IndividualList[] group = new IndividualList[10];
答案 4 :(得分:16)
我完全不理解,为什么每个人都在建议阵列的genric类型,尤其是这个问题。
如果我需要索引n
个不同的arraylists,该怎么办?
声明List<List<Integer>>
我需要手动创建n
ArrayList<Integer>
个对象,或者使用for循环来创建n
列表或其他方式,无论如何它总会我有责任创建n
列表。
如果我们通过强制转换为List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]
来声明它,那就太棒了。我认为这是一个很好的设计,人们不必自己创建所有的索引对象(arraylists)
任何人都可以告诉我为什么这个(arrayform)会是一个糟糕的设计,它的缺点是什么?
答案 5 :(得分:11)
您可以创建Array of ArrayList
List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
outer[i] = new ArrayList<>();
}
这在这样的场景中会有所帮助。你知道外面的大小。但内在的大小各不相同。在这里,您可以创建一个固定长度的数组,其中包含大小变化的数组列表。希望这对你有所帮助。
在 Java 8 及以上版本中,您可以更好地完成此任务。
List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());
使用方法参考
更好List<Integer>[] outer = new List[10];
Arrays.setAll(outer, ArrayList :: new);
答案 6 :(得分:6)
这种情况的问题在于使用arraylist,你会得到o(n)的时间复杂度,以便在特定位置添加。如果使用数组,则通过声明数组来创建内存位置,因此它是常量
答案 7 :(得分:5)
这适用于ArrayList数组。尝试了解它是如何工作的。
import java.util.*;
public class ArrayOfArrayList {
public static void main(String[] args) {
// Put the length of the array you need
ArrayList<String>[] group = new ArrayList[15];
for (int x = 0; x < group.length; x++) {
group[x] = new ArrayList<>();
}
//Add some thing to first array
group[0].add("Some");
group[0].add("Code");
//Add some thing to Secondarray
group[1].add("In here");
//Try to output 'em
System.out.println(group[0]);
System.out.println(group[1]);
}
}
向Kelvincer致信一些代码。
答案 8 :(得分:3)
您无法创建泛型类型的数组。创建ArrayLists列表:
List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();
或者如果你真的需要数组(警告:糟糕的设计!):
ArrayList[] group = new ArrayList[4];
答案 9 :(得分:2)
创建和初始化
Object[] yourArray = new Object[ARRAY_LENGTH];
写入权限
yourArray[i]= someArrayList;
访问内部ArrayList的元素:
((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
读取权限
将数组元素i作为ArrayList使用类型转换:
someElement= (ArrayList<YourType>) yourArray[i];
表示数组元素i:读取索引j
处的ArrayList元素arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
答案 10 :(得分:1)
我想我已经很晚了,但我遇到了同样的问题,必须按照我的项目的要求创建一个数组列表,以便将不同子类的对象存储在同一个地方,这就是我最终要做的:
ArrayList<?>[] items = new ArrayList[4];
ArrayList<Chocolate> choc = new ArrayList<>();
ArrayList<Chips> chips = new ArrayList<>();
ArrayList<Water> water = new ArrayList<>();
ArrayList<SoftDrink> sd = new ArrayList<>();
因为数组中的每个数组列表都包含不同的对象(Chocolate、Chips、Water 和 SoftDrink) --这是一个模拟自动售货机的项目--。 然后我将每个 Arraylists 分配给数组的索引:
items[0]=choc;
items[1]=chips;
items[2]=water;
items[3]=sd;
希望对遇到类似问题的人有所帮助。
答案 11 :(得分:1)
静态地声明一个ArrayLists数组,比如精灵位置为Points:
ArrayList<Point>[] positionList = new ArrayList[2];
public Main(---) {
positionList[0] = new ArrayList<Point>(); // Important, or you will get a NullPointerException at runtime
positionList[1] = new ArrayList<Point>();
}
动态:
ArrayList<Point>[] positionList;
int numberOfLists;
public Main(---) {
numberOfLists = 2;
positionList = new ArrayList[numberOfLists];
for(int i = 0; i < numberOfLists; i++) {
positionList[i] = new ArrayList<Point>();
}
}
尽管这里有一些注意事项和一些复杂的建议,但我发现一个ArrayLists数组是一个优雅的解决方案来表示相同类型的相关ArrayLists。
答案 12 :(得分:1)
List [] listArr = new ArrayList [4];
上面的行给出了警告,但它有效(即它创建了ArrayList的数组)
答案 13 :(得分:1)
您可以像这样创建
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
您必须创建非泛型类型的数组,然后将其转换为通用类型。
答案 14 :(得分:0)
如果你想避免Java警告,并且仍然有一个ArrayList的数组,你可以将ArrayList抽象成一个类,像这样:
public class Individuals {
private ArrayList<Individual> individuals;
public Individuals() {
this.individuals = new ArrayList<>();
}
public ArrayList<Individual> getIndividuals() {
return individuals;
}
}
然后你就可以安全地拥有:
Individuals[] group = new Individuals[4];
答案 15 :(得分:0)
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
al[i] = new ArrayList<String>();
}
答案 16 :(得分:0)
你可以这样做:
//创建ArrayList类型的数组
`ArrayList<Integer>[] a = new ArrayList[n];`
//对于数组中的每个元素,创建一个ArrayList
for(int i=0; i<n; i++){
a[i] = new ArrayList<Integer>();
}
答案 17 :(得分:0)
String strArray[]={
getResources().getString(R.string.string1),
getResources().getString(R.string.string2),
getResources().getString(R.string.string3),
getResources().getString(R.string.string4)
};
答案 18 :(得分:0)
我发现这更容易使用......
static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
group=new ArrayList[size];
for(int i=0;i<size;i++)
{
group[i]=new ArrayList<Individual>();
}
答案 19 :(得分:-1)
你可以创建一个List []并通过for循环初始化它们。它编译没有错误:
List<e>[] l;
for(int i = 0; i < l.length; i++){
l[i] = new ArrayList<e>();
}
它也适用于arrayList [] l。