繁体   English   中英

在初始化中填充Java对象数组

[英]Filling array of Java objects in initialization

我有一个称为List已实现数据结构(它是一个单链表)。 我的Java程序中有以下代码:

List[] Adjacent = new List[N]; // Trying to create an array of N List objects

假设N =6。我希望Adjacent是六个元素组成的数组,其中每个元素都是一个List对象本身。 但是,当我尝试访问它时,该数组实际上是N个空引用的数组。 到底是怎么回事?

当然,我做了以下事情来解决我的问题:

for (int p = 0; p < N; p++) 
    Adjacent[p] = new List();

但这不是我真正想要的。 有没有更有效/更好的方法呢?

当你有

List list;

这是参考 ,不是对象。 要拥有一个对象,您必须使用new List(...)创建一个对象。 没有办法解决此问题。 您必须初始化对实际对象的引用。

另外,创建一个类的名称与已内置的东西名称相似的类也更糟。我建议您使用如下所示的List列表:

List<List<String>> listofLists = new ArrayList<>();
for(int i = 0; i < N; i++) listOfLists.add(new ArrayList<>());

您可以更有效地重用现有的类。

使用Java 8将有一种“不错”的方法:

MyObject[] array=Stream.generate(MyObject::new).limit(N).toArray(MyObject[]::new);

Stream.generate(MyObject::new)将创建由Supplier提供的无限对象流,该SupplierMyObject的默认构造函数, limit(N)显然限制了对象的数量, toArray(MyObject[]::new)将对象存储到由IntFunction<A[]>构造的数组中,该函数使用指定的int构造数组,在本例中,该int设置为与new MyObject[i]等效。 该流将为该i参数提供限制N

尽管最后一部分不是的真正精神。 通常,您可以将流定向到处理对象的使用者,并完全省略该数组。

不。 创建新阵列后,应手动填写。 当然,我们有Arrays.fill(array, object)方法,但是它将为数组中的所有位置设置相同的对象。

假设N 总是 6 ...

List[] l = new List[]{new List(),new List(),
       new List(),new List(),new List(),new List()};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM