2017-04-08 18 views
4

标题说明了一切。这真的是一个简单的问题。只是想了解这些东西是如何工作的。 这将是最好的选择返回一个不可变的空列表?做Collections.emptyList()还是ImmutableList.of()还是有更好的选择?Collections.emptyList()vs guava的ImmutableList.of()

+2

如果你的方法需要'ImmutableList',那么显然你需要Guava方法。否则,Guava团队自己会说,使用JDK功能优先于Guava(如果可用)。 –

+0

我总是使用'ImmutableList.of'。它缩短了5个字符。 – ZhekaKozlov

+1

@Zheka如果你使用静态导入,'empyList()'是非常简洁的,'()'是毫无意义的。 –

回答

4

我会用Collections.emptyList()因为

1)为什么要使用第三方库时,你已经具有相同的JDK

2)Collections.emptyList()返回一个真正简单的私有类Collections.EMPTY_LIST(见Collections.java在JDK )。

鉴于ImmutableList.of()返回一个具有所有功能的Guava不可变列表,就像真的包含对象一样,用new Object[0]对它进行初始化。

如果您只需要空列表,则不需要ImmutableList功能。

+1

你的第三点是错误的。在Guava 21中,'ImmutableList.of()'返回一个单独的空列表,它是'New RegularImmutableList (ObjectArrays.EMPTY_ARRAY)',所以没有分配。使用标准实现对虚拟方法调度具有优势(有许多'ImmutableList'子类,但是在大多数情况下,您只会遇到一两个问题,并且可以更好地优化单调或双调调用站点)。 IIRC曾经是'EmptyImmutableList'类,但是由于效率的原因,它已经被删除。 – maaartinus