Lists.newArrayList vs新的ArrayList
创build一个stringList的最佳构造是什么? 它是Lists.newArrayList() (从番石榴)或new ArrayList() ? 
 这只是个人喜好吗? 
 还是只是键入genericstypes推断? 
 或者在使用Lists.newArrayList()有没有任何理论或实际价值? 
番石榴生成器保存inputtypes参数多次。 比较:
 List<Foo<Bar, Baz>> list = Lists.newArrayList(); List<Foo<Bar, Baz>> list = new ArrayList<Foo<Bar, Baz>>(); 
在Java 7中,它已经过时了,因为你有钻石操作符:
 List<Foo<Bar, Baz>> list = new ArrayList<>(); 
从番石榴的来源 :
 public static <E> ArrayList<E> newArrayList() { return new ArrayList<E>(); } 
所有这一切都允许types推断 – 在运行时没有区别。
加一点, 重载版本的Lists.newArrayList()更有用:
-  
Lists.newArrayList(E... elements) -  
Lists.newArrayList(Iterable<? extends E> elements) -  
Lists.newArrayList(Iterator<? extends E> elements) 
 提供比new ArrayList()更有用的function。 
 例如: new ArrayList()不能这样做: 
 Lists.newArrayList("a","b"); Lists.newArrayList(anIterable); 
这就是Lists.newArrayList所做的事情:
 @GwtCompatible(serializable = true) public static <E> ArrayList<E> newArrayList() { return new ArrayList<E>(); } 
所以这两个基本上是一样的,使用newArrayList的优点是不必复制genericstypes。 这对复杂的generics非常有用:
 List<Map<X,List<Y>> list = new ArrayList<Map<X,List<Y>>(); List<Map<X,List<Y>> list = Lists.newArrayList(); 
 正如这里所解释的那样,使用Lists , Sets等的主要动机是提高代码中的可读性/重复性以及types推断。 
如前所述,Java 7使得这个过时了,但是我使用了工厂方法,因为它可以在以后更改列表,集合,映射或其他types。
用于重载构造函数的Java 8方法。
如果您想使用Guava的重载构造函数,我会推荐使用Java 8 Stream Builder的另一种方法。
 List<String> listTest = Stream.<String>builder.add("Hello").add("My Name").add("Blah").build().collect(Collectors.toList());