【发布时间】:2011-11-22 07:06:03
【问题描述】:
可以将List<T> 初始化为包含给定数量的nulls,其中T 是列表所属类的类型参数吗?我当然可以通过循环来做到这一点,但想知道是否可以不使用。
List<T> myList = new ArrayList<T>(numEls);
创建一个给定容量的列表,但大小为 0,因此 myList.get(x) 对所有 x 都失败,因此也是如此,例如myList.set(numEls-1,null).
myList = Arrays.asList(new T[numEls]);
不编译,并且
myList = (List<T>) Arrays.asList(new Object[numEls]);
在 Eclipse 中编译(带有 Unchecked cast 警告),但不使用 javac。
更新:感谢您的回答!然而,我发现了另一个非常简短的解决方案,接近我上面的最后一次尝试,它可以在 eclipse 和我们的自动构建系统中编译:转换数组,而不是列表!
myList = Arrays.asList((T[]) new Object[numEls]);
【问题讨论】:
-
为什么需要在没有循环的情况下解决这个问题?这很不合理。只需拨打
ensureCapacity,然后拨打n次add(null)。 -
@RolandIllig 我不需要在没有循环的情况下解决它,我只是想知道它是否可能。
-
你为什么要用更复杂的东西代替它来避免单行循环?如果你知道你想要的尺寸可以包裹一个
Object[]。 -
也不是解决方案:但您可以编写
List的实现,它表现为一个稀疏列表并为所有get(i) | i < size()返回null。恕我直言,“初始化List”没有意义,因为List只是一个接口。 -
@AlistairIsrael 公平点。我的意思是“初始化实现列表的东西”,可以是普通的
ArrayList,也可以是Arrays.asList(...)返回的列表类型,或者其他,以效果最好的为准。
标签: java list initialization