次のコードは、Vector を文字列ベクトル (キーとして使用) と最後に整数 (値として使用) に分割します。
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つのエントリしか取得しません。1 つのエントリ (キー) が入力されるとそのままになりますが、値はスキャン プロセスを繰り返すたびに (ファイル内の行から新しいベクトルを読み取るたびに) 変化します。2 つを除く他のすべてのキーを破棄します。
これは私のコンパレータの問題ですか? それとも、TreeMap が put() で理解できないことをしているのですか?