代码之家  ›  专栏  ›  技术社区  ›  Wickoo

在Java中为集合赋值一个不可变实例的最佳方法

  •  0
  • Wickoo  · 技术社区  · 16 年前

    今天我读了一些hibernate代码,发现了一些有趣的东西。 有一个名为collectionhelper的类定义了以下常量变量:

    public final class CollectionHelper {
    
       public static final List EMPTY_LIST = Collections.unmodifiableList( new ArrayList(0 ) ;
    public static final Collection EMPTY_COLLECTION = Collections.unmodifiableCollection(new ArrayList(0) );
    public static final Map EMPTY_MAP = Collections.unmodifiableMap( new HashMap(0) );
    

    他们使用这些常量初始化具有不可变实例的集合。为什么他们不直接使用collections.empty_列表初始化列表?使用以下方法有好处吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   danben    16 年前

    不,没有好处。对我来说唯一明显的区别是这个方法保证返回一个不同的 EMPTY_LIST 比任何人 List 创建于 Collections.emptyList() ,而 集合。空列表() 可以退回也可以不退回 实例。我更倾向于同意@wizardofods的评论,他们根本不知道这些api函数。

        2
  •  0
  •   Tom Hawtin - tackline    16 年前

    有时,它可以通过减少在特定调用站点使用的实现数来提高性能,从而允许更好的单态和双态内联优化。不过,有点遥不可及。