Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 等于或介于两个值之间的Lookupvalue_Java_Collections - Fatal编程技术网

Java 等于或介于两个值之间的Lookupvalue

Java 等于或介于两个值之间的Lookupvalue,java,collections,Java,Collections,我有一个CSV文件,它将一个地区链接到一个邮政编码。看起来是这样的(最低拉链,最高拉链,地区): 我需要一个基于邮政编码返回区域的函数。大概是这样的: foo = getRegion(1600) // foo is set to 1 bar = getRegion(1642) // bar is set to 1 baz = getRegion(4351) // baz is set to 2 qux = getRegion(1211) // qux is set to null 1600,1

我有一个CSV文件,它将一个地区链接到一个邮政编码。看起来是这样的(最低拉链,最高拉链,地区):

我需要一个基于邮政编码返回区域的函数。大概是这样的:

foo = getRegion(1600) // foo is set to 1
bar = getRegion(1642) // bar is set to 1
baz = getRegion(4351) // baz is set to 2
qux = getRegion(1211) // qux is set to null
1600,1
1601,1
1602,1
...
1799,1
1800,2
1801,2
... 
我目前实现这一点的方式是使用
HashMap
。当我读取CSV时,我迭代1600到1799之间的每个值,为每个邮政编码/地区组合创建一个键值对,并对CSV中的每一行重复该操作。结果是一个如下所示的
HashMap

foo = getRegion(1600) // foo is set to 1
bar = getRegion(1642) // bar is set to 1
baz = getRegion(4351) // baz is set to 2
qux = getRegion(1211) // qux is set to null
1600,1
1601,1
1602,1
...
1799,1
1800,2
1801,2
... 

这将创建一个大的
HashMap
,它确实有效。有没有比将这个小表分解为一个大的
HashMap
更高效的(内存)实现呢?

下面类似的方法会有所帮助-

class ZipRange {
    int start;
    int end;
}

// Fill up this map parsing through csv
Map<ZipRange, Integer> zipToRegion;

int zipToSearch = 2870;

// Create method which returns integer which corresponds to region
for (ZipRange zip : zipToRegion.keySet()) {
    if (zipToSearch >= zip.start && zipToSearch <= zip.end) {
        return zipToRegion.get(zip);
    }
}
return -1;
classziprange{
int启动;
内端;
}
//通过csv填写此地图
地图区域;
int-zipToSearch=2870;
//创建方法,该方法返回对应于区域的整数
用于(ZipRange zip:zipToRegion.keySet()){

如果(zipToSearch>=zip.start&&zipToSearch下面类似的内容将有所帮助-

class ZipRange {
    int start;
    int end;
}

// Fill up this map parsing through csv
Map<ZipRange, Integer> zipToRegion;

int zipToSearch = 2870;

// Create method which returns integer which corresponds to region
for (ZipRange zip : zipToRegion.keySet()) {
    if (zipToSearch >= zip.start && zipToSearch <= zip.end) {
        return zipToRegion.get(zip);
    }
}
return -1;
classziprange{
int启动;
内端;
}
//通过csv填写此地图
地图区域;
int-zipToSearch=2870;
//创建方法,该方法返回对应于区域的整数
用于(ZipRange zip:zipToRegion.keySet()){


如果(zipToSearch>=zip.start&&zipToSearch我想你想要一个

我想你想要一个

我想你想要为你的
ZipRange
类实现
hashCode
equals
)是的,当然。这是为了给出关于要使用的数据结构和搜索算法的基本概念。如果输入间隔不重叠,你可以“滥用”
hashCode
等于
ZipRange(16001799)
ZipRange(16421642)
都是一样的…那么你就不需要根据OP的要求在
键集上循环,这是不可能的。我想你应该为你的
ZipRange
类实现
hashCode
equals
)是的,当然。这是为了给出使用数据结构和搜索算法的基本概念。如果输入间隔不重叠,您可能会“滥用”
hashCode
等于
,从而
ZipRange(16001799)
ZipRange(16421642)
都是一样的…那么你就不需要根据OP的要求在
键集上循环,这是不可能的。我想到了。我用python创建了一个sklearn.tree来查看它的外观。ZIP和region之间的关系没有太多逻辑,它会导致一个复杂的树,我无法改变数据的存储方式马丁伯格:我指的不是像
sklearn.Tree
那样的“决策树”,而是“段树”或“区间树”“:谢谢。看起来很有趣。我会研究一下。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面更改,只有链接的答案可能会无效。-@GHajba:你说得对,但是,我认为Web是关于“链接到信息”的。”我没有“复制它”:…而且,我也没有时间写太多:)我想到了这一点。我用python创建了一个sklearn.tree来查看它的外观。ZIP和region之间的关系没有太多逻辑,它导致了一个复杂的树,我无法改变数据传递给我的方式。@MartijnBurger:我不是指“决策树”类似于
sklearn.Tree
提供的那些,但是是“段树”或“区间树”“:谢谢。看起来很有趣。我会研究一下。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面更改,只有链接的答案可能会无效。-@GHajba:你说得对,但是,我认为Web是关于“链接到信息”的。”与其说是“复制它”:…而且,我并不总是有时间写很多:)