gpt4 book ai didi

java - Java TreeMap put() 方法的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 06:39:51 25 4
gpt4 key购买 nike

我有以下代码,它将 Vector 拆分为字符串 vector (用作键)和末尾的整数(用作值)。

payoffs.put(new Vector<String>(keyAndOutput.subList(0, keyAndOutput.size() - 1)), Integer.parseInt(keyAndOutput.lastElement()));

所讨论的 TreeMap 是使用具有以下方法的比较器构建的,该方法强加了字典顺序、与大小写无关的排序,并且还考虑了长度(较长的 vector 总是比较短的 vector “更大”)。

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 个条目,但 map 最多只能获取 2 个条目。一旦输入一个条目(键),它就会保留,但值会随着扫描过程的每次迭代而变化(每次从文件中的一行读取新 vector 时)。它会丢弃除这两个键之外的所有其他键。

这是我的比较器的问题吗?或者 TreeMap 是否用 put() 做了一些我不理解的事情?

最佳答案

回答 不回答 问题,除了关于您的代码之外,还有 但是 一些小要点:

  1. 你不应该进行两次compareTo;比较一次,将结果赋给sgn;如果!=0则中断
  2. 您的 else 继续是多余的。
  3. 不应比较 -1 或 1,而应比较 <0 或 >0;许多compareTo方法基于(x1-x2)返回,它可以给出任何负数或正数。

编辑:哦!当然,String.compareToIgnoreCase() 的返回是这 (3) 个比较器之一。正如与我同时发布的另一个答案所指出的那样,这可能是导致您错误的原因。

编辑2:更正了开头陈述以反射(reflect)问题的实际答案。

关于java - Java TreeMap put() 方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/415158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com