Avi*_*ash 7 java algorithm data-structures
我需要一张地图,其中我的密钥应该基于3列,比方说C1, C2, C3.C1优先级最高.C2具有小于一C1和C3具有小于一C2.
我如何在地图中创建密钥,以便如果有人要求提供信息C1,我应该能够提供所有的值C1.如果要求,我也应该能够返回所有值C1 & C2
如果您的键列可以排序(即,在 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)