[英]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
提供的无限对象流,该Supplier
是MyObject
的默认构造函数, 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.