我有以下代码,它将向量拆分为字符串向量(用作键)和最后的整数(用作值)。
payoffs.put(new Vector<String>(keyAndOutput.subList(0, keyAndOutput.size() - 1)), Integer.parseInt(keyAndOutput.lastElement()));
有问题的 TreeMap 是使用具有以下方法的 Comparator 构造的,该方法强制执行字典、大小写无关的排序,该排序也考虑了长度(较长的向量总是比较短的向量“更大”)。
public int compare(Vector<String> arg0, Vector<String> arg1) {
int sgn = 0;
if (arg0.size() > arg1.size()) {
return 1;
} else if (arg0.size() < arg1.size()) {
return -1;
}
for (int i = 0; i < arg0.size(); i++) {
if (arg0.elementAt(i).compareToIgnoreCase(arg1.elementAt(i)) == 1) {
sgn = 1;
break;
} else if (arg0.elementAt(i).compareToIgnoreCase(arg1.elementAt(i)) == -1) {
sgn = -1;
break;
} else {
continue;
}
}
return sgn;
}
现在,对于这个问题......尽管正在读取的文本文件中有 8 个条目,但地图最多只能获得 2 个条目。一旦输入了一个条目(键),它就会保留,但值会随着扫描过程的每次迭代而改变(每次它从文件中的一行读取一个新向量)。它会抛出除两个之外的所有其他键。
这是我的比较器的问题吗?或者 TreeMap 是否在用 put() 做一些我不理解的事情?