由于@Jared罗素指出的那样,这并不完全是展示Guava如何帮助您在代码中实现的改进的最佳示例。
这就是说,如果你只是在寻找的番石榴如何才能找到自己的方式进入这个代码演示,这里是一个镜头:
我在这里使用
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
public class Question6842887 {
public static void main(String[] args) {
Builder<Integer> builder = ImmutableList.builder();
for (int i = 1; i < 6; i++) {
builder.add(i);
}
ImmutableList<Integer> list = builder.build();
System.out.println(Joiner.on(System.getProperty("line.separator")).join(list));
}
两个番石榴事情是immutable lists和joiner。
这可能不是您通常需要ImmutableList的情况类型,但不管怎样习惯使用它都是很好的做法。不可变集合(以及任何不可变对象)的巨大优势在于它们是线程安全的。你永远不需要做出防御性的副本,或者在关闭内容后改变其内容。你可以简单地自由传递它,或者缓存它,并且对它的不变性感到高兴和安全。欲了解更多有关不变性问题的信息,我会参考Effective Java,第15项。
我在这里演示的另一个番石榴班是乔伊纳。 Joiner只是一个很好而简单的方法,可以将一组字符串与分隔符组合在一起。这是相当可定制的,你可以指定它将如何处理空值以及你想要使用哪个分隔符。在这种情况下,我已指定System.getProperty("line.separator")
作为我的分隔符;你可以选择使用", "
或类似的。我还选择不处理空值,因为我知道我们的ImmutableList中没有空值。但是,如果您的列表可能具有空值,您可以选择一个选项,如skipNulls
或useForNull
。
番石榴的下一个版本预计将包括Range的支持。这可以用来简化你的列表建设到像ContiguousSet<Integer> list = Ranges.closedOpen(1, 6).asSet(DiscreteDomains.integers());
虽然我不推荐它,你的整个程序可能是一行。
来源
2011-07-27 13:01:32
Ray
和Jared Russell ...使用番石榴可以使迭代比通常的Java集合更快...像(Iterator itr = appCodeCombos.iterator(); itr.hasNext();) – Enosh
我不希望有性能利用显式迭代器的“增强for循环”对循环的好处。我期望(尽管我没有对它进行基准测试),Joiner解决方案会更快一些,因为你只有一个调用慢速的System.out.println。 – Ray
使用谷歌收藏将代码执行更快,没有问题,即使它在微秒内运行得更快 – Enosh