2013-08-31 71 views
3

我最近发现可以通过调用Collections.nCopies()方法而不是使用for-loop来初始化Java中的List。但是这让我想到,在for循环中使用这种方法会有性能优势还是劣势,还是只是做同样事情的一种更简单的方法?Collections.nCopies()与For循环初始化

+0

您是否尝试过测试? –

回答

6

由于nCopies返回的集合是不可变的,因此此集合中的条目不需要“物化”。换句话说,所需要的只是一个T类型的单个对象的空间;其他一切都是伪装为具有N对象集合的集合接口的实现,但实际上只有一个对象返回N次。

当您创建的集合很大时,这可能会证明您可以在空间上获得很大改善:实际上,集合越大,与通过for环路初始化的真实集合相比,您的储蓄就越大。

+0

+1 - 为了完整性,值得注意的是,Java 6和Java 7 *中的nCopies方法的行为(我检查了代码),并且没有理由期望为未来的版本进行更改。 –

+0

因为它返回一个不可变的集合,是否会影响ArrayList的add()方法? –

+0

@OmarAbdeldayem是的,你会得到一个'RuntimeException'肯定是一个'UnsupportedOperationException' – nachokk

0

当您使用nCopies()作为List构造函数的参数时,不变性不是问题:构造函数创建一个不可变的副本。