我最近发现可以通过调用Collections.nCopies()
方法而不是使用for-loop来初始化Java中的List。但是这让我想到,在for循环中使用这种方法会有性能优势还是劣势,还是只是做同样事情的一种更简单的方法?Collections.nCopies()与For循环初始化
回答
由于nCopies
返回的集合是不可变的,因此此集合中的条目不需要“物化”。换句话说,所需要的只是一个T
类型的单个对象的空间;其他一切都是伪装为具有N
对象集合的集合接口的实现,但实际上只有一个对象返回N
次。
当您创建的集合很大时,这可能会证明您可以在空间上获得很大改善:实际上,集合越大,与通过for
环路初始化的真实集合相比,您的储蓄就越大。
+1 - 为了完整性,值得注意的是,Java 6和Java 7 *中的nCopies方法的行为(我检查了代码),并且没有理由期望为未来的版本进行更改。 –
因为它返回一个不可变的集合,是否会影响ArrayList的add()方法? –
@OmarAbdeldayem是的,你会得到一个'RuntimeException'肯定是一个'UnsupportedOperationException' – nachokk
当您使用nCopies()作为List构造函数的参数时,不变性不是问题:构造函数创建一个不可变的副本。
- 1. for循环初始化
- 2. For循环初始化
- 3. 初始化for循环中的映射
- 4. Java从For循环初始化ArrayList
- 5. 在for循环中初始化视图
- 6. 初始化语句for循环
- 7. 缺失; for循环初始化
- 8. for循环缺失的初始化
- 9. 初始化变量在for循环
- 10. “for”循环的初始值
- 11. 使用IntellijIDEA在For循环中未初始化循环变量
- 12. 用for循环初始化锯齿阵列<int>由for循环
- 13. Verilog For循环:错误的初始值
- 14. for循环初始声明错误
- 15. 为什么for循环初始化中的条件比循环内部更快?
- 16. 如何使用已在for循环中初始化的变量?
- 17. 我的变量不能初始化for循环MATLAB
- 18. 使用for循环的字符串数组初始化
- 19. Outlook 2010宏引发VBA错误'For循环未初始化'
- 20. 目标C++ for循环多个初始化失败
- 21. 初始化一个for循环有2个变量
- 22. 增强for循环无法初始化对象
- 23. 通过嵌套for循环初始化哈希映射
- 24. 非常奇怪的挂在一个for循环初始化
- 25. 变量初始化外部和for循环之间的区别
- 26. 失踪;在for循环初始化器后
- 27. C++ for循环初始化计数器错误
- 28. 的Javascript:略初始化嵌套For循环内
- 29. 'for'中的对象初始化和循环?
- 30. 在java中初始化for循环中的对象?
您是否尝试过测试? –