TreeMap中运用的陷阱之一
TreeMap中使用的陷阱之一
今天做TC,用到了TreeMap,用到了其中的一个方法pollFirstEntry(),但是发现这个方法是since 1.6的,而TC只支持到1.5的jdk,我试着改为先getFirstEntry().getKey(),然后对这个key做了一点操作,然后再remove(key),然后再put(key,value),结果发现pollFirstEntry能得到正确的结果,但用后一种却得不到正确的结果,结果分析了一下,是这样的:
关键出在对key做了一些操作后然后remove这个步骤上,实际上TreeMap中的R-B Tree在remove时会用key的自然排序查找这个key,而我在key中自己写了compare的方法,而对key做操作的时候修改了这个用于compare的属性,got it!Tricky!
后面的步骤只要变变即可以得出正确结果:
先getFirstEntry().getKey(),然后remove(key),然后对key做操作,然后再put进去,这样就能得出正确结果了。
今天做TC,用到了TreeMap,用到了其中的一个方法pollFirstEntry(),但是发现这个方法是since 1.6的,而TC只支持到1.5的jdk,我试着改为先getFirstEntry().getKey(),然后对这个key做了一点操作,然后再remove(key),然后再put(key,value),结果发现pollFirstEntry能得到正确的结果,但用后一种却得不到正确的结果,结果分析了一下,是这样的:
关键出在对key做了一些操作后然后remove这个步骤上,实际上TreeMap中的R-B Tree在remove时会用key的自然排序查找这个key,而我在key中自己写了compare的方法,而对key做操作的时候修改了这个用于compare的属性,got it!Tricky!
后面的步骤只要变变即可以得出正确结果:
先getFirstEntry().getKey(),然后remove(key),然后对key做操作,然后再put进去,这样就能得出正确结果了。