您的位置:首页 > 编程语言 > Java开发

Java 快速、轻量级 Collection 类的集合GNU Trove

2012-07-27 12:51 344 查看
今天有幸接触到了 Trove,搜索资料后,进一步了解了Trove
,使用之后效率提升明显、内存占用量显著减少。

Trove 是一个快速、轻量级 Collection 类的集合。Trove
提供所有标准 java.util Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含 int 键或值的 Map 等)上操作的 Collections 类的版本。 


 

官方网站: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 }



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息