我的理解是这样的:
你可以把每一个元素想象成一个由三部分组成的整体
第一部分,存放着比跟元素小的元素的索引
中间部分,存放着两个动作,一个是判断,一个是赋值.因为在判断为0的时候,就会覆盖内容
第三部分,存放着比它大的数的索引
当然,实际上不是链表,不过类似于优化版的链表
在遍历的时候,从左往右遍历,完成一个元素的遍历,才能在遍历右边的一个,就保证了逻辑的严密性.
-------------------------------------------------
而比较器你也看到了,compareto()方法是双参,
第一个参是要添加的,第二个参是根元素
在比较器的方法体中,参1减参2,和参2减参1,不过是改变判断结果,实现逻辑还是不变的.
----------------------------------------------
昨天发现一个特别有趣的
就是TreeMap集合
我们玩了一下TreeMap的集合嵌套
大集合的键是小TreeMap集合
现象时,你要不写比较器
编写不标红
但是运行期报类型转换异常,
如果写了比较器,比如都返回1
在便利的时候,会将全部键遍历,但是对应的值全是null
纠结了好久
是因为键在map集合中,遍历了所有的值,不知道该用哪一个了.于是直接不选了,傲娇的反悔了null.
我当时就醉了.
我以为java是汉子
没想到这丫是个姑娘. |