Google guava和Apache commons哪个好

Google guava和Apache commons哪个好,第1张

Guava 的 FAQ 部分有专门解答:

Why did Google build all this, when it could have tried to improve the Apache Commons Collections instead

The Apache Commons Collections very clearly did not meet our needs It does not use generics, which is a problem for us as we hate to get compilation warnings from our code It has also been in a "holding pattern" for a long time We could see that it would require a pretty major investment from us to fix it up until we were happy to use it, and in the meantime, our own library was already growing organically

An important difference between the Apache library and ours is that our collections very faithfully adhere to the contracts specified by the JDK interfaces they implement If you review the Apache documentation, you'll find countless examples of violations They deserve credit for pointing these out so clearly, but still, deviating from standard collection behavior is risky! You must be careful what you do with such a collection; bugs are always just waiting to happen

Our collections are fully generified and never violate their contracts (with isolated exceptions, where JDK implementations have set a strong precedent for acceptable violations) This means you can pass one of our collections to any method that expects a Collection and feel pretty confident that things will work exactly as they should

简单地说:

Apache Commons Collections 3x 不支持泛型,Guava 支持

Guava 实现了 JDK 的标准接口,而 Apache Commons Collections 3x 有很多违反标准的地方

Apache Commons Collections 4x 的发行注记如下:

Major changes since 321

Use of generics and other language features introduced in Java 5 (varargs, Iterable)

Removed deprecated classes / methods and features which are now supported by the JDK

Replaced Buffer interface with javautilQueue

Added concept of split maps with respective interfaces Put / Get (see also package splitmap)

Added new Trie interface together with an implementation of a Patricia Trie

从 4x 开始,Apache Commons Collections 开始使用 JDK 5 的特性(包括泛型),此外也去除、添加了很多内容

各有千秋, 我主要使用 Apache Commons ,辅助使用  Google guava

但是细节方法上还是有区别的, 比如

GoogleGuava Splitter 对比 Apache StringUtils

apache commons的StringUtils提供的常用功能介绍,但是google的guava也提供了一些字符串处理的常见功能,所以,将对两者的字符串分割函数做一次比较详细的对比(结果比较surprise)。 

区别 

首先看基本的使用方法:

// Apache StringUtils  

String[] tokens1= StringUtilssplit("one,two,three",',');  

   

// Google Guava splitter  

Iteratable<String> tokens2 = Splitteron(','),split("one,two,three");

google提供的方法更加的面向对象一点,因为它要先创建一个Splitter对象,然后使用它来分割字符串,而apache的方法则有点函数式编程的味道,它的方法都是静态的。 

这里我更加倾向于采用google的splitter,因为这个对象是可以重用的,且可以在其上附加更多的功能,比如trim,去掉空的元素等,一切都很简单。

Splitter niceCommaSplitter = Splitteron(',') omitEmptyString()trimResults();  

niceCommaSplittersplit("one,, two,  three"); //"one","two","three"  

niceCommaSplittersplit("  four  ,  five  "); //"four","five"

看起来有点用,还有其他区别么? 

另外一个需要注意的地方就是Splitter返回的是Iteratable<String>,而StringUtilssplit返回的是一个String数组。 

大部分使用分隔符的情况是我们需要对字符串按照分隔符进行遍历处理,仅此而已。 

下面就是常用的代码性能对比的例子:

final String numberList = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten";  

  

long start = SystemcurrentTimeMillis();    

for(int i=0; i<1000000; i++) {  

    StringUtilssplit(numberList , ',');     

}  

Systemoutprintln(SystemcurrentTimeMillis() - start);  

    

start = SystemcurrentTimeMillis();  

for(int i=0; i<1000000; i++) {  

    Splitteron(',')split(numberList );  

}  

Systemoutprintln(SystemcurrentTimeMillis() - start);

代码很简单,就是都对同一个字符串进行100万次的分隔 *** 作,看看时间上的区别,结果如下:

983  

165

很明显,guava的速度快很多,这个程序如果运行在每天处理大量字符串的服务中,那么性能差异更加明显。我想其中的原因是Splitter返回的是Iterable<String>,而StringUtilssplit返回的是一个String[],需要创建新的String对象,导致耗时增加。 

如果我们对Splitter对象缓存,那么速度提高更多:

start = SystemcurrentTimeMillis();  

    Splitter s = Splitteron(',');  

    for (int i = 0; i < 1000000; i++) {  

      ssplit(numberList);  

    }  

    Systemoutprintln(SystemcurrentTimeMillis() - start);

结果为12,神奇吧,呵呵

课程内容很多,大致归纳一下的话,主要包括以下内容:

基础课程

Java8编程语言>数据库入门教程>Web前端入门教程>UI框架:jQueryEasyUI和Bootstrap>JSP、Servlet编程> MyBatis框架>Spring框架>SpringMVC框架>

高级课程

数据结构与算法>设计模式>clean code>guava解析>缓存>apache-commons包解析>数据库性能调优>存储过程>JVM性能调优>系统安全与Shiro框架教程>框架源码解读系列

项目课程

JavaSe桌面游戏>JavaSe桌面应用>H5游戏>H5网站应用>JSP、Servlet项目>JavaEE全栈式项目化工程实践概述>SSM框架企业级项目应用>SSH框架企业级项目应用

1) 本文列出的名单是根据我自己的调查,并结合个人的经验。有可能是它们不恰恰是最流行的,但至少众所周知的。

2) 我会不断更新这个列表,使之更加完整和准确。感谢您的意见。

一个典型的Java项目依赖于第三方库。本文总结的Java库适用于各种应用,比较流行并且广泛使用。其中一些还提供简单的示例(来自ProgramCreek)。

Java SDK 肯定是使用最广的库,所以本文的名单焦点是流行的第三方库。该列表可能并不完善,所以如果你觉得有什么应该出现在列表中的,请留下您的评论。非常感谢!

1、核心库

Apache Commons Lang:来自Apache的核心库,为javalang API补充了许多常用的工具类,如字符串 *** 作、对象的创建等。

Google Guava:来自谷歌的核心库,包括集合(Collection)、缓存(Caching)、支持原语(Primitives)等。(示例)

2、HTML、XML Parser

Jsoup:一个简化了的 HTML *** 作的库。(示例)

STaX:一组可以高效处理 XML的API。 (示例)

3、Web框架

Spring:Java平台上众所周知的开源框架和依赖注入容器。(示例)

Struts2:来自Apache的流行Web框架。 (示例)

Google Web Toolkit:Google提供的开发工具库,主要用于构建和优化复杂的Web程序用。 (示例)

Strips:使用最新Java技术构建的Web程序框架,推荐使用。

Tapestry:面向组件的框架,用于使用Java创建动态、健壮、扩展性高的Web应用程序。

请猛击这里 查看以上面框架之间的比较。

4、图表、报表、图像

JFreeChart:用于创建如条形图、折线图、饼图等图表。

JFreeReport:创建于输出PDF格式的报表。

JGraphT:创建图像,其中只包含由线段连接的点集。

5、窗口

Swing:SDK提供的GUI库。(示例)

SWT:Eclipse提供的GUI库。

SWT与Swing的比较。(链接)

6、GUI框架

Eclipse RCP。(示例)

7、自然语言处理

OpenNLP:来自Apache的自然语言处理库。 (示例)

Stanford Parser:斯坦福大学提供的自然语言处理库。(示例)

如果你是一名NLP专家,请猛击这里 查看更多工具库介绍。

8、静态分析

Eclipse JDT:由IBM提供的静态分析库,可以 *** 作Java源代码。(示例)

WALA:可以处理jar包文件(即字节码)的工具库。(示例)

9、JSON

Jackson: 用于处理JSON数据格式的多用途的Java库。Jackson 旨在快速、准确、轻量、对开人员友好之间找到最好的平衡点。

XStream:一个简单用于对象和XML互相转换的库。

Google Gson:一个专门用于Java对象和Json对象相互转换的工具库。(示例)

JSON-lib:用于 beans、maps、collections、java arrays、XML 和 JSON 之间相互转换 *** 作的工具库。

10、数学

Apache Commons Math:提供数学计算和数值统计需函数的工具库。

11、日志

Apache Log4j:风行一时的日志记录 *** 作库。 (示例)

Logback:当前流行的log4j项目的继任者。

SLF4J(The Simple Logging Facade for Java): 各种日志框架的一个简单的外观或抽象(如javautillogging 、logback、log4j等),允许用户在部署时加入需要的日志框架。

12、Office

Apache POI:利用其提供的APIs,可以使用纯Java代码 *** 作各种基于微软OLE2合成文档格式的文档。

Docx4j:一个用于创建、 *** 作微软公开的XML文件的库(支持Word docx、 Powerpoint pptx和Excel xlsx)。

13、日期和时间

Joda-Time:如有质量问题包退包换的Java日期和时间类。

14、数据库

Hibernate、EclipseLink、JPA

JDO

jOOQ

SpringJDBC、Spring Data

Apache DbUtils

15、开发工具

Lambok: 旨在减少代码编写的Java开发库。

以上就是关于Google guava和Apache commons哪个好全部的内容,包括:Google guava和Apache commons哪个好、蓝桥软件学院java课程培训主要是讲什么内容的、java线段类,两个顶点,求线段长度,哪里不对呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9541407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存