Java 快速、轻量级 Collection 类的集合GNU Trove
2012-07-27 12:51
344 查看
今天有幸接触到了 Trove,搜索资料后,进一步了解了Trove
,使用之后效率提升明显、内存占用量显著减少。
Trove 是一个快速、轻量级 Collection 类的集合。Trove
提供所有标准 java.util Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含 int 键或值的 Map 等)上操作的 Collections 类的版本。
![](http://news.open-open.com/lib/uploadImg/20120118/20120118192440_993.png)
官方网站:http://www.open-open.com/lib/view/home/1326885882890
传统的集合类,比方说
种基本数据类型之一:
9 种键和 9 种值,组成 81 种不同类型的
从 Trove 中得到什么呢?许许多多的高效集合。除了那 81 种不同的
—— 如果散列映射成为瓶颈,很可能是因为大量地使用它,这意味着散列函数被反复不断地调用。因此,散列函数中每一点多余的开销都可能成为瓶颈。(顺便说一下,如果散列函数足够简单,JIT 编译器就可能将其编译成内联函数,这样在支持灵活的散列策略的同时又不会带来额外的开销 —— 真是免费的午餐!)
如下是一个写的集合工具类
,使用之后效率提升明显、内存占用量显著减少。
Trove 是一个快速、轻量级 Collection 类的集合。Trove
提供所有标准 java.util Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含 int 键或值的 Map 等)上操作的 Collections 类的版本。
![](http://news.open-open.com/lib/uploadImg/20120118/20120118192440_993.png)
官方网站:http://www.open-open.com/lib/view/home/1326885882890
传统的集合类,比方说
Map吧,它包括键和值,每个键或者值都可以是
Object或者 8
种基本数据类型之一:
byte、
short、
char、
int、
long、
float、
double和
boolean。这样就有
9 种键和 9 种值,组成 81 种不同类型的
Map!更糟的是,只要其中一个存在缺陷,就意味着其他 80 种很可能也存在缺陷,而能够共用的代码很有限,因为为了有效地处理每种数据类型,需要分别实现算法,从而,维护的工作量太大了
从 Trove 中得到什么呢?许许多多的高效集合。除了那 81 种不同的
HashMap版本之外(比如
TIntIntHashMap、
TIntObjectHashMap等),还有
List和
Set类可以存储基本类型(如
TIntHashSet、
TFloatArrayList等)。这种体系结构甚至允许您插入自己的散列策略,以便选择对您的数据集而言可能更有效(或者更灵活)的算法。当然,支持灵活的散列算法也要付出性能代价
—— 如果散列映射成为瓶颈,很可能是因为大量地使用它,这意味着散列函数被反复不断地调用。因此,散列函数中每一点多余的开销都可能成为瓶颈。(顺便说一下,如果散列函数足够简单,JIT 编译器就可能将其编译成内联函数,这样在支持灵活的散列策略的同时又不会带来额外的开销 —— 真是免费的午餐!)
如下是一个写的集合工具类
1 import gnu.trove.THashMap; 2 import gnu.trove.TIntObjectHashMap; 3 import gnu.trove.THashSet; 4 import gnu.trove.TLinkedList; 5 6 import java.util.HashMap; 7 import java.util.HashSet; 8 import java.util.LinkedList; 9 import java.util.List; 10 import java.util.Map; 11 import java.util.Set; 12 13 14 public class CollectionFactory { 15 16 static boolean trove = true; 17 18 static { 19 if (System.getProperty("trove").equalsIgnoreCase("true")) 20 trove = true; 21 } 22 23 public static Map getHashMap() { 24 if (trove) { 25 return new THashMap(); 26 } else { 27 return new HashMap(); 28 } 29 } 30 31 public static TIntObjectHashMap getHashMap2() { 32 return new TIntObjectHashMap(); 33 } 34 35 36 37 public static Map getHashMap(int capacity) { 38 if (trove) { 39 return new THashMap(capacity); 40 } else { 41 return new HashMap(capacity); 42 } 43 } 44 45 public static Set getHashSet() { 46 if (trove) { 47 return new THashSet(); 48 } else { 49 return new HashSet(); 50 } 51 } 52 53 public static Set getHashSet(int capacity) { 54 if (trove) { 55 return new THashSet(capacity); 56 } else { 57 return new HashSet(capacity); 58 } 59 } 60 61 public static List getLinkedList() { 62 if (trove) { 63 return new TLinkedList(); 64 } else { 65 return new LinkedList(); 66 } 67 } 68 69 }
相关文章推荐
- Java集合总结之Collection整体框架
- java基础讲解之集合鼻祖--- Collection
- java集合 之 Collection和Iterator接口
- java集合-----Collection
- java基础学习集合之Collection 九-1
- Java框架集合:Collection<E>、Iterable<T>和Iterator<E>接口
- java中利用泛型构建的collection集合
- Java API 1.8源码--【集合类 collection】
- Java基础(集合卷)--单列集合老大Collection
- 【集合详解】Java集合总结(上)-Collection家族
- 黑马程序员-JAVA基础-Java 集合之Collection 接口和遍历方法
- java 快速排序 优化 以及扩展到对象 List 集合
- JAVA语言基础:集合框架Collection 和Map
- Java基础-15总结对象数组,集合Collection,集合List
- Java学习笔记 --- Collection集合框架
- java程序员从笨鸟到菜鸟之(二十二)集合Collection
- Java-集合框架Collection之List(一)
- Java 集合框架02---Collection的源码分析
- Java 集合总结(Collection系列与Map系列)
- 11级_Java_曹建波 04.25 Spring便历Collection集合