2014-12-04 81 views
0

我正在处理大量的图表,我需要将它们的记录保存在内存中。我有一个由整数组成的1,000,000,000记录。这些记录是:Java中用于保存Bigdata Integer记录的最佳数据结构是什么?

record1: 13455659009,2459904444, 888999, 45590008 
record2: 7787687970097,98776,898767746,6556 
........ 
record1000000000: 8736406,.....,987586985,764765282 

第一,我用的bitset来拯救他们,forexample为RECORD1我这样做:

BitSet bs=new BitSet(); 
bs.set(134659009); 
bs.set(245990444); 
bs.set(888999); 
bs.set(45590008); 

但bitset的效率不高。因为我只有四个数字,但它节省了245990444. 我想用ram保存这些记录,所以占用较少的空间很重要。在ram中保存这些整数记录的最佳结构是什么? 哈希集好于位集 谢谢。

回答

0

最有效的结构可能是一个原始整数数组,即int[]。取决于你如何使用它,它可能(或可能不)有助于用实现java.lang.Set<Integer>的类来包装它。

另一方面,为什么你甚至需要一个图形节点ID的整数列表?为什么不只是一个Node类,并且它的一个Set<Node>成员用于图边?

+0

我需要存储每个节点的邻接列表。我有一个散列表,关键是节点ID和值是它的邻接列表的记录。 – 2014-12-04 19:37:42

+0

如果每个顶点有十亿个顶点和四个或五个边,那么存储这些顶点的最有效的内存方式可能​​是作为原始的'int []'数组(在您的散列值中)。即便如此,对于所有这些阵列来说,它的容量也会有30GB。你还可以用数组而不是哈希表保存一些内存(假设大多数顶点有边),而不是散列表,即'int [] []'而不是'HashMap <整数,位集>'。 – david 2014-12-05 22:15:13

相关问题