Java映射与3列的键

Avi*_*ash 7 java algorithm data-structures

我需要一张地图,其中我的密钥应该基于3列,比方说C1, C2, C3.C1优先级最高.C2具有小于一C1C3具有小于一C2.

我如何在地图中创建密钥,以便如果有人要求提供信息C1,我应该能够提供所有的值C1.如果要求,我也应该能够返回所有值C1 & C2

jop*_*jop 2

如果您的键列可以排序(即,在 Java 中,它们需要排序Comparable)并且可以轻松地定义除第一个之外的所有列的最大值和最小值,那么您可以使用与数据库中的多列索引相同的策略。

整数列的示例:

public class Key implements Comparable<Key> {
    int c1, c2, c3;

    private static final int c2_min = Integer.MIN_VALUE;
    private static final int c2_max = Integer.MAX_VALUE;
    private static final int c3_min = Integer.MIN_VALUE;
    private static final int c3_max = Integer.MAX_VALUE;

    @Override
    public int compareTo(Key o) {
        if (c1!=o.c1) return Integer.compare(c1, o.c1);
        if (c2!=o.c2) return Integer.compare(c2, o.c2);
        return Integer.compare(c3, o.c3);
    }

    // constructor, equals, ...

}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样获取某个值的所有k1条目c1

map.subMap(new Key(k1, Key.c2_min, 0), new Key(k1, Key.c2_max, 0));
Run Code Online (Sandbox Code Playgroud)

同样,使用前两列:

map.subMap(new Key(k1, k2, Key.c3_min), new Key(k1, k2, Key.c3_max));
Run Code Online (Sandbox Code Playgroud)