在Koloboke集之间复制时的性能问题

时间:2018-01-08 12:38:49

标签: java performance koloboke

由于迭代的执行方式和添加的新条目,如果一个迭代一个集合并复制到另一个集合,性能非常慢。 请考虑以下代码段:

        final int num = (int) (1024 * 1024 * 2.1);
        final HashLongSet set1 = HashLongSets.newMutableSet();
        for (int i = 0; i < num; i++) {
            final long oid = r.nextLong();
            set1.add(oid);
        }

        System.out.println("populated first set..");

        final HashLongSet set2 = HashLongSets.newMutableSet();
        final LongCursor cursor = set1.cursor();
        while (cursor.moveNext()) {
            set2.add(cursor.elem());
        }
        System.out.println("populated first set..");

在这种情况下,有没有办法加速第二套人口?我明白,如果我事先知道预期的设置大小,我可以在第二组构造中使用它并使事情变得更快 - 但这并不总是可行的 - 我可以在两者之间插入一些条件,确定哪个输出设置值需要插入或完全扔掉。

1 个答案:

答案 0 :(得分:1)

如果使用创建方法中的第一个set as参数创建第二个HashLongSet,它会更快:

 final HashLongSet set2 = HashLongSets.newMutableSet(set1);

<强>更新
根据您的评论,如果您执行以下操作会怎么样:

  1. 使用initialCapacity countSets
  2. 创建所需数量的HashLongSet((int) set1.size() / countSets
  3. 然后运行循环,将set1的数据划分到其他集合上。在每个循环中,您必须检查是否已达到initialCapacity并使用另一个initialCapacity扩展相应的HashLongSet:set2.ensureCapacity(set2.size() + initialCapacity