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>();

问题是:

我想要一个java地图,如下所示:

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

  • 最接近的频率

  • 将compareTo方法重写为:

    @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;
    }