我有一张有序的地图
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));
如何使用object作为键从该映射中获取值。
答案 0 :(得分: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都参与决定你的类的两个对象是否相等。
答案 1 :(得分:0)
您可能未在equals
课程中履行hashCode
/ RangeValues
合同。
因此,无法保证cIndexes.get(keys[index])
不会返回null
。