Java中大集合<Long>求交集的方法比较(1)

setA.retainAll(setB);

long end = System.currentTimeMillis();

System.out.println(“[LinkedList-HashSet]RetainAll耗时:” + (end - begin));

}

3.『外层遍历+内层bitMap』查找:


BitSet也称作BitMap,它是一种通用的快速数据结构,不幸的是它太费内存,所以通常我们使用压缩位图。RoaringBitmap是一种压缩位置,它提供更好的压缩效果,在某些情况下比其它压缩位图快好几百倍。

https://github.com/RoaringBitmap/RoaringBitmap

RoaringBitmap已经使用在很多知名的开源项目中:

  • Apache Spark

  • Apache Hive

  • Apache Tez

  • Apache Kylin

  • … …

Roaringbitmap中在Long类型中,提供了2种实现 **Roaring64NavigableMap** 和 **Roaring64Bitmap** Roaring64NavigableMap 基于红黑树实现, Roaring64Bitmap 基于ART( The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases )数据结构实现。

那么,外层使用ArrayList、LinkedList,内层使用Roaring64NavigableMap、Roaring64Bitmap。

// 外层:ArrayList,内层:Roaring64NavigableMap

private void outArrayListInnerRoaring64NavigableMap(List listA, List listB) {

long begin = System.currentTimeMillis();

ArrayList setA = new ArrayList<>(listA);

Roaring64NavigableMap ansB = new Roaring64NavigableMap();

listB.forEach(ansB::addLong);

setA.removeIf(e -> !ansB.contains(e));

long end = System.currentTimeMillis();

System.out.println(“[ArrayList-Roaring64NavigableMap]RetainAll耗时:” + (end - begin));

}

// 外层:LinkedList,内层:Roaring64NavigableMap

private void outLinkedListInnerRoaring64NavigableMap(List listA, List listB) {

long begin = System.currentTimeMillis();

LinkedList setA = new LinkedList<>(listA);

Roaring64NavigableMap ansB = new Roaring64NavigableMap();

listB.forEach(ansB::addLong);

setA.removeIf(e -> !ansB.contains(e));

long end = System.currentTimeMillis();

System.out.println(“[LinkedList-Roaring64NavigableMap]RetainAll耗时:” + (end - begin));

}

// 外层:ArrayList,内层:Roaring64Bitmap

private void outArrayListInnerRoaring64Bitmap(List listA, List listB) {

long begin = System.currentTimeMillis();

ArrayList setA = new ArrayList<>(listA);

Roaring64NavigableMap ansB &

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值