trove是轻量级实现java.util Collections API的第三方开源项目
官网: http://trove.starlight-systems.com/overview
trove相比jdk原生的集合类有三个优势:
1、更高的性能
2、更底的内存消耗
3、除了实现原生Collections API并额外提供更强大的功能
集合是java编程最常用的API之一,把项目的集合对象改用trove替换就能获得性能提升和内存的节省。
这是对一个项目底成本的优化方案。
下面二段代码分别测试trove和原生的集合的性能
1. trove
public void testIterator(){
TIntObjectMap map = new TIntObjectHashMap();
for( int i = 0; i < 1000; i++){
Game g = new Game();
g.setName( "最终幻想" + i);
g.setSize(15000 + (i << 3));
g.setCtDate( new Date());
map.put(i, g);
}
int size = map.size();
TIntObjectIterator it = map.iterator();
for( int i = size; i > 0; i--){
it.advance();
System. out.println(it.key() + "=" + it.value());
if(it.key() == 3){
Game g = new Game();
g.setName( "最终幻想13");
g.setSize(15000 + (i << 3));
g.setCtDate( new Date());
it.setValue(g);
}
}
System. out.println( "=======================================" );
System. out.println(map.get(3));
}
2. HashMap
public void testIterator(){
Map map = new HashMap();
for( int i = 0; i < 1000; i++){
Game g = new Game();
g.setName( "最终幻想" + i);
g.setSize(15000 + (i << 3));
g.setCtDate( new Date());
map.put(i, g);
}
Set set = map.entrySet();
for( Iterator it = set.iterator(); it.hasNext(); ){
Entry e = (Entry )it.next();
System. out.println(e.getKey() + "=" + e.getValue());
if(((Integer)e.getKey()).intValue() == 3){
Game g = new Game();
g.setName( "最终幻想13");
g.setSize(18000);
g.setCtDate( new Date());
e.setValue(g);
}
}
System. out.println( "=======================================" );
System. out.println(map.get(3));
}
两段的测试结果,trove花费0.001s,HashMap花费0.090s
trove的测试代码使用其Map额外提供的iterator进行遍历,当然他也支持通过entrySet方式遍历。
使用SizeOf.jar计算上面两段的map占用内存的大小,trove占用214024byte,HashMap占用250128byte,可见内存方面节省的比率并是很大。
从官方下载的API中可以看中trove根据基础的数据类型实现了Map、List和Set,比如TIntObjectHashMap其key只能是int, value是继承Object的所有对象;TIntList只能存入int;TIntSet只能存入int。
在java里有些对象的hashCode和equals方法不能被覆盖(比如:String和数组),以这种对象为Map的key时就不能随心所欲,trove的提供的custom map可以解除这种约束,只需要实现HashingStrategy接口传递给Map,Map判断key是否相同时调用HashingStrategy的computeHashCode和equals代替object自身的hashCode和equals,以下是官网一个例子
For example, this code:
char[] foo, bar;
foo = new char[] {'a','b','c'};
bar = new char[] {'a','b','c'};
System.out.println(foo.hashCode() == bar.hashCode() ? "equal" : "not equal");
System.out.println(foo.equals(bar) ? "equal" : "not equal");
produces this output:
not equal
not equal
And so an entry stored in a java.util.HashMap with foo as a key could not be retrieved with bar, since there is no way to override hashCode() or equals() on language array objects.
In a gnu.trove.THashMap, however, you can implement a TObjectHashingStrategy to enable hashing on arrays:
class CharArrayStrategy implements TObjectHashingStrategy {
public int computeHashCode(Object o) {
char[] c = (char[])o;
// use the shift-add-xor class of string hashing functions
// cf. Ramakrishna and Zobel, "Performance in Practice
// of String Hashing Functions"
int h = 31; // seed chosen at random
for (int i = 0; i < c.length; i++) { // could skip invariants
h = h ^ ((h << 5) + (h >> 2) + c[i]); // L=5, R=2 works well for ASCII input
}
return h;
}
public boolean equals(Object o1, Object o2) {
char[] c1 = (char[])o1;
char[] c2 = (char[])o2;
if (c1.length != c2.length) { // could drop this check for fixed-length keys
return false;
}
for (int i = 0, len = c1.length; i < len; i++) { // could skip invariants
if (c1[i] != c2[i]) {
return false;
}
}
return true;
}
}
总结:
Trove是很值得了解和使用的一个开源项目,你会喜欢上他的。
分享到:
相关推荐
OpenStack Trove is your step-by-step guide to set up and run a secure and scalable cloud Database as a Service (DBaaS) solution. The book shows you how to set up and configure the Trove DBaaS ...
trove.jar 是一个Java应用程序,它包含Trove库的实现。Trove是一个开源的Java集合框架,专注于提供高性能的数据结构,如固定大小的数组、哈希表和集合。这个库被设计用来替代Java标准库中的数据结构,尤其是当性能...
《Trove库详解:探索Java世界中的高效集合框架》 Trove,这个名称可能对一些Java开发者来说并不陌生,它是3.1a1版本的开源库,专门针对Java平台设计,提供了一套高效的集合框架。在Java的标准库中,虽然已经包含了...
OpenStack Trove是OpenStack平台中的一个核心组件,专门用于提供数据库即服务(Database as a Service,简称DBaaS)。Trove的设计目标是让用户能够轻松地在云端管理和部署数据库,享受到数据库管理和云计算的双重...
Trove是一款高效、开源的Java库,主要用于提供高性能的数据结构,比如集合类(如List、Set、Map)和散列类。Trove的目标是为Java程序员提供与Java内置集合类等效但性能更高的替代品,尤其在处理大量数据时,其优势...
1. **OpenStack简介**:首先会介绍OpenStack的基本概念,包括它的架构、组件以及它们如何协同工作。这将帮助读者理解OpenStack作为开源云平台的全局视角。 2. **Trove架构**:详细解释Trove的组件和工作流程,如...
trove.jar
当你需要基本数据类型的集合时,你需要自定义集合类,或使用第三方库,如 Trove 。出于性能考虑,使用TIntObjectHashMap,效率会高于直接使用JDK的HashMap,因为略去了基本类型自动包装和解包的动作。该资源为源码包...
openstack中trove模块的mysql数据库表脚本
Trove一个快速、轻量级针对java原子类型(byte,int,float,long等)的Collection 类的集合。
OpenStack Trove,简化IT操作流程,降低使用数据库使用门槛举个例子,曾经我搭建一个LAMP网站,数据库要自己安装,创建,授权,必要的话,还要自己做主从很繁琐,而且不是专业人员也搞不定,有了Dbaas后,我只需要在...
Trove 是一个快速、轻量级 Collection 类的集合。Trove 提供所有标准 java.util Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含 int 键或值的 Map 等)上操作的 Collections 类的版本。
Since Trove is one of the most recent projects of OpenStack, DBAs and system administrators can find it difficult to set up and run a DBaaS using OpenStack Trove. This book helps DBAs make that step. ...
java高性能容器库,Trove 是一个快速、轻量级 Collection 类的集合。Trove 提供所有标准 java.util Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含 int 键或值的 Map 等)上操作的 ...
OpenStack Trove is your step-by-step guide to set up and run a secure and scalable cloud Database as a Service (DBaaS) solution. The book shows you how to set up and configure the Trove DBaaS ...
离线安装包,亲测可用
《Trove Mod Loader:解锁Trove游戏的无限可能》 Trove是一款深受玩家喜爱的沙盒风格网络游戏,其中丰富的模组系统为游戏增添了无尽的趣味性和可玩性。然而,传统的模组安装过程通常需要通过Glyph客户端进行,这...
Trove可以在网络上的任何位置捕获重要信息,并将其保存到Notion。 使用Trove,您可以直接在浏览器中打开“概念”页面或数据库,然后开始在页面上添加突出显示,做笔记和编辑属性。 这些突出显示和评论仍保留在网页上...
trove4j库jar包