我目前使用List
和循环的实现遇到性能问题。我正在考虑进行一些自定义,Map
但是否可以正确覆盖getter以便与以下设置一起使用:
Map包含自定义对象,键可以如下:
case A key: "10"
calling get("10") would return matching object
case B key: "10;12;14"
calling get("10"),get("12"),get("14") would return same object
case C key: "10;20-30"
calling get("10"), get(value between 20 and 30) would return same object
在这种情况下使用地图是最好的方法,有什么替代方法?
谢谢。
更新: 添加了完整的实现
更新2: 如果需要,可以按照注释中的建议将RangeMap用于内部theMap
。
如果键范围不重叠,则可以创建一个自定义容器,该容器内部TreeMap
使用以下实现的自定义键存储数据Comparable
:
class MyStorage<T> {
private static final class Range implements Comparable<Range> {
private int first;
private int last;
public Range(int first_, int last_) {
first = first_;
last = last_;
}
// This heavily relies on that the ranges don't overlap
@Override public int compareTo(Range other) {
if (last < other.first)
return -1;
if (first > other.last)
return 1;
return 0;
}
}
private Map<Range, T> theMap = new TreeMap<Range, T>();
public void put(String key, T obj) {
String[] ranges = key.split(";");
for (String range : ranges) {
//System.out.println("Adding " + range);
String[] bounds = range.split("-");
//System.out.println("Bounds " + bounds.length);
int first = Integer.parseInt(bounds[0]);
if (bounds.length == 1)
theMap.put(new Range(first, first), obj);
else
theMap.put(new Range(first, Integer.parseInt(bounds[1])), obj);
}
}
public T get(String key) {
return get(Integer.parseInt(key));
}
public T get(int key) {
return theMap.get(new Range(key, key));
}
}
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
MyStorage<Integer> storage = new MyStorage<Integer>();
storage.put("10;20-30", 123);
storage.put("15;31-50", 456);
System.out.println(storage.get("42"));
}
}
问题内容: 我想使用Python表示一组整数范围,其中该集合可以动态修改并进行包含测试。具体来说,我想将其应用于文件中的地址范围或行号。 我可以定义要关注的地址范围: 然后,我希望能够向集合中添加一个潜在的重叠范围,以便在添加集合时变为: 但是然后可以从集合中删除我可以排除范围的集合,集合变成: 最后,我希望能够遍历集合中包含的所有整数,或测试集合是否包含特定值。 我想知道执行此操作的最佳方法是什
在javascript中,我有两个映射map1={a:1,b:2,c:3,d:4,e:5};map2={td:a,bd:c,sd:e}; 现在我需要搜索map2的值,即(a,b,e),如果它是map1的键,然后用map1示例中的对应值更新map2的值——map2[td]=a和map[a]=1,然后我想更新map2[td]=1。谁能帮我找到一个算法吗。
问题内容: for (Entry entry : map.entrySet()) { Double key = entry.getKey(); String value = entry.getValue(); 迭代地图时是否可以知道上一个元素和下一个元素是什么? 问题答案: 您可以使用此方法,它的迭代器以升序顺序返回条目: 每个条目检索都是O(logN),因此对于完整迭代而言,这不是最有效的方法。
我为我的处理器编程了多种方法,例如: 问题是r.Form始终是一个空映射,在我的删除请求中,我以JSON格式发送Id,如下所示: 在main方法中,我注册了如下处理程序方法: 为什么r.Form和r.PostForm总是一张空地图?
这与我想要的不同,因为它是作为JSON的每个单独行的数组。我想要一个json(不是数组),其中列是键,数组是值。我怎么能那么做?
问题内容: 我有两个div元素。他们每个人都有450px的宽度和高度。如何检查第一个div是否与第二个div重叠? 我尝试使用javascript hittest,但是有点复杂。由于我试图找出其实际工作方式,因此我想从一个简单的代码开始。 我发现可以使用 .getClientRects 来获取元素的边界,但是我不确定如何比较边界。 请给我提意见! 问题答案: 类似这样的东西,并通过getBound