我最近发现,在Java中,可以通过调用Collections.nCopies()
方法来初始化列表,而不是使用for循环。但这让我想知道,使用这种方法是否比使用for循环有性能优势/劣势,还是只是一种更简单的做法?
我最近发现,在Java中,可以通过调用Collections.nCopies()
方法来初始化列表,而不是使用for循环。但这让我想知道,使用这种方法是否比使用for循环有性能优势/劣势,还是只是一种更简单的做法?
nCopies
返回的集合是不可变的,因此此集合中的条目不需要“实体化”。换句话说,只需要一个类型为T
的单个对象的空间;其他所有内容都是实现集合接口的内容,假装拥有N
个对象的集合,但实际上只有一个对象,它返回N
次。for
循环初始化的真实集合相比,您的节省就越大。RuntimeException
,而且还可能是一个 UnsupportedOperationException
。 - nachokkList<T>
的一个实现,但不是 ArrayList
。它是 Collections
的一个内部类,名为 CopiesList
(演示)。CopiesList
不允许你向其中添加、删除或放置任何对象 - 你会得到一个异常。 - Sergey KalinichenkoT
的对象,更改一个索引处的对象是否会影响整个集合?编辑:我刚试了一下,确实会。谢谢大家的帮助。 - Omar Abdeldayem当您将nCopies()用作List构造函数的参数时,不可变性不是问题:构造函数会创建一个副本,该副本不是不可变的。