数据结构课程设计出了bug,对java理解深的戳进来

我用TreeMap来建索引搜索文件,定义了TreeMap table1 = new TreeMap<String, Object>();
我这里的键值是String ,大家都知道TreeMap里原始的String排序是按字典序,比如 "2">"11"
但是我输入的String都是数字字符(1,2,3......),我想让String按整数规则排序
于是我就定义了一个比较器:
class Compara implements Comparator<String>{
public int compare(String str1,String str2){
int a = Integer.parseInt(str1);
int b = Integer.parseInt(str2);
if (a < b) {
return -1;
}
else {
return 1;
}}}
然后TreeMap table2 = new TreeMap<String, Object>(new Compara());用这个比较器实例化一个TreeMap.
我用table1来传入数据,然后table2.putAll(table1) 来给table2赋值,这样table2里键值String的排序按整数规则排序.然后奇怪的事就发生了:
Set<String> set = table2.keySet();
Iterator<String> i = set.iterator();
while(i.hasNext()){
String key = i.next();
int c = Integer.parseInt(key);
if(b<c)break;
boolean ok =table2.containsKey(key);
if(a<=c)list.add((Object)(table2.get(key)));
}
list是一个ArrayLIst对象,这段代码的意思是满足某条件后用list存入table2的Object值
但我发现不管怎么样list都是空的(即使满足条件),boolean ok是我调试的时候设的,一直返回false,说明table2里没有key?我的key就是用keyset和迭代器传进来的,怎么就不存在?但是table1里测试是返回true的,table1有,为什么table2不行?肯定和这那比较器有关,但是我昨晚debug了好久实在想不出来什么原因,我只好想别的办法回避了这个bug,但是我实在想知道原因,哪位java大神解释一下?
叙述很长,看完它的人我非常感谢你
你的比较器写得有问题,一句话就能搞定的事情,非要用if else,而且如游带果两个数如果相等应该返回0这种情况你都没考虑进去。比较器compare方法改成这么一句return Integer.parseInt(str1) - Integer.parseInt(str2);

知道为什么返回false吗,containsKey这个方法也是通过比较器中的compare方法进行比较的,才知道有没有这个key,你的compare方法漏了一种情况,也就是两个数相等应该返回0。

使用泛型的目的是为了保证类型安全,你两处地方都用了Object,已经腊敬失去了使用泛型的意义,完全就是为了逃过编译器的检查。还有你的变量名用些什么神局芦a,b,c之类的,很不规范。
你太菜了!!!加油吧,少年。