JAVA:如何加入HashTable?

时间:2017-04-14 15:40:12

标签: java self-join

加入两个Hashtables最优雅的方式是什么?

我有这个HashTable,我不能使用数组或列表或集合,因为它混淆了处理自定义类。至少这就是我的想法。

        **Hashtable<ItemSet, Integer> frequentItemSetL1 = new Hashtable<>();**
        for (Map.Entry<ItemSet, Integer> entry : candidateItemSetC1.entrySet()) {
        if (entry.getValue() >= supportThreshold) {
            frequentItemSetL1.put(entry.getKey(), entry.getValue());
        }

包含: 键 - 值对。

  • Key =项目集编号
  • 值=数据中该项目集的出现次数

看起来像这样:

{1}, 3
{2}, 23
{3}, 7
{4}, 18
..... 

我需要 frequentItemSetL1 的KEYS加入THEMSELVES;

结果应该是:

{1, 2}
{1, 3}
{1, 4}
{2, 3}
{2, 4}
{3, 4}

我尝试了两个for循环和KeySet,但没有走得太远。可能需要一些新鲜的想法。

试过这个:

for (int i = 0; i < frequentItemSetL1.size(); i++) {
        Integer item1 = frequentItemSetL1.get(i);
        for (int j = i + 1; j < frequentItemSetL1.size(); j++) {
            Integer item2 = frequentItemSetL1.get(j);

            // Create a new candidate by combining itemset1 and itemset2
            candidateItemSetC2.put(item1, item2);
        }

1 个答案:

答案 0 :(得分:0)

由于没有人能够提供帮助,只是为了澄清和帮助他人,我所寻找的是:

List<ItemSet> candidateItemSetC2 = new ArrayList<>();
    Hashtable<ItemSet, Integer> frequentItemSetL2 = new Hashtable<>();
    // For each itemset I1 and I2 of level k-1
    for (ItemSet is : frequentItemSetL1.keySet()) {
        for (ItemSet is2 : frequentItemSetL1.keySet()) {
            if (is.equals(is2)) {
                continue;
            }
            if (is.set.length != is2.set.length) {
                continue;
            }
            boolean shouldJoin = true;
            for (int i = 0; i < is.set.length - 1; i++) {
                if (is.set[i] != is2.set[i]) {
                    shouldJoin = false;
                }
            }

            if (shouldJoin == false) {
                continue;
            }

            int[] join = new int[is.set.length + 1];
            for (int i = 0; i < is.set.length; i++) {
                join[i] = is.set[i];
            }
            join[join.length - 1] = is2.set[is2.set.length - 1];
            Arrays.sort(join);
            ItemSet joinedSet = new ItemSet(join);

            if (!candidateItemSetC2.contains(joinedSet)) {
                candidateItemSetC2.add(joinedSet);
            }


            for (int p = 0; p < candidateItemSetC2.size(); p++) {
                //System.out.print(candidateItemSetC2.get(p));
            }


        }