有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从排序树映射中获取值

我有一张分类地图

Map<RangeValues,String> cIndexes = new TreeMap(new StartIndexComparator());

其中key是包含两个整数值的类的对象

public class RangeValues {


    private int startIndex;
    private int endIndex;
}

所以,当我试图从该映射中访问值时,我得到的值是null

Set<RangeValues> keySet = cIndexes.keySet();
RangeValues[] keys = keySet.toArray(new RangeValues[keySet.size()]);

for(int index = 0; index < keys.length-1; index++)
{
   **cIndexes.get(keys[index]) // this is giving null**
   int nextIndex = keys[index+1].getStartIndex();
}

比较器的实现是

public class StartIndexComparator implements Comparator<RangeValues> {

    @Override
    public int compare(RangeValues r1, RangeValues r2) {

        if(r1.getStartIndex() > r2.getStartIndex())
        {
            return 1;
        }
        else 
        {
            return -1;
        }

    }
}

填图

RangeValues range = new RangeValues();
range.setStartIndex();
range.setEndIndex();
cIndexes.put(range,conjunctions.get(conjIndex));

如何使用对象作为键从该贴图中获取值


共 (1) 个答案

  1. # 1 楼答案

    您需要重写对象中用作键的equals和hashCode方法

    public class RangeValues {
    
    
        private int startIndex;
        private int endIndex;
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + endIndex;
            result = prime * result + startIndex;
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            RangeValues other = (RangeValues) obj;
            if (endIndex != other.endIndex)
                return false;
            if (startIndex != other.startIndex)
                return false;
            return true;
        }
    
    
    }
    

    上述equals和hashCode方法假设startIndex和endIndex都将参与决定类的两个对象是否相等