java中键上有错误条的映射?
问题是: 我想要一个java地图,如下所示:java中键上有错误条的映射?,java,dictionary,Java,Dictionary,问题是: 我想要一个java地图,如下所示: Map<Double,List<MyClass>> map = new HashMap<Double,List<MyClass>>(); 我预计这将使地图假设两个键在错误条内时是相同的。我将地图更改为: Map<NearestFreq,List<MyClass>> map = new HashMap<NearestFreq,List<MyClass>();
Map<Double,List<MyClass>> map = new HashMap<Double,List<MyClass>>();
我预计这将使地图假设两个键在错误条内时是相同的。我将地图更改为:
Map<NearestFreq,List<MyClass>> map = new HashMap<NearestFreq,List<MyClass>();
Map Map=newhashmap您正在使用一个散列映射,因此Map insert调用hashCode
方法来确定项目应该在映射中的位置<仅当发生冲突时才会调用code>equals
作为Java中的一般规则,如果您重写equals
或hashCode
,您也应该始终重写另一个,以确保a.hashCode()==b.hashCode()
如果a.equals(b)
为真。我找到了一个解决方法
HashMap
更改为TreeMap
最接近的频率
和@Override
public int compareTo(NearestFreq o) {
if(Math.abs(this.freq-((NearestFreq)o).freq)<range){
return 0;
}
else if((this.freq-((NearestFreq)o).freq) <0) {
return -1;
}
else if((this.freq-((NearestFreq)o).freq) >0) {
return 1;
}
return 0;
}
@覆盖
公共int比较(最接近频率o){
如果(Math.abs(this.freq-((NearestFreq)o.freq)当您提供等于时,您还必须提供匹配的hashCode
(特别是当您想在HashMap中使用它时)。但我认为这不能像那样工作。所有值都需要相等才能满足传递条件(您可以在任意两个double之间构建一长串非常接近的double)。您可以尝试预先定义一些bucket(例如,舍入到最接近的整数)。@Thilo问题是噪波会有几个整数宽,它是-5您对如何覆盖hashcode()有何建议我的场景的方法?我应该以某种方式协调并为一系列关键点提供相同的整数,我不知道该怎么做。你可能想看看Guava的RangeMap:看起来不错,让我来看看。谢谢Oliver。现在,我将它改为TreeMap,它可以工作。如果你有两个非常接近的关键点,会发生什么但是超出范围,然后你尝试得到另一个在这两个中间的键。我想你会根据树的当前形状得到随机的结果。也许没关系,但是要考虑的事情。感谢BKEL的抬头。是的,我意识到了这个问题。但是在我的例子中,与类中的间距无关。我得到的信息远高于噪音水平。但是,如果其他人遇到这个问题,这对他们来说是件好事。
@Override
public int compareTo(NearestFreq o) {
if(Math.abs(this.freq-((NearestFreq)o).freq)<range){
return 0;
}
else if((this.freq-((NearestFreq)o).freq) <0) {
return -1;
}
else if((this.freq-((NearestFreq)o).freq) >0) {
return 1;
}
return 0;
}