本帖最后由 云惟桉 于 2012-6-13 17:17 编辑
比较是一个相对的概念,但是在程序中处理的时候,是按照操作句柄来的。
比如说add(A1),那么这里A1就是句柄。因为对add方法来说,直接产生联系的可见对象是A1,A2对于add是直接不可见的。
A1.compareTo(A2),进行对应操作的时候会使用句柄A1的方法来处理。
所以在TreeSet中,如果需要add(A1),那么使用的就是A1的compareTo。因此每次添加的时候调用的都是“被加入”对象的compareTo。
另外从性能方面考虑,如果TreeSet中存放了继承层次更多的对象(比如5层继承)
那么当添加时,举一个例子:
TreeSet已有: A1 B1 C2 D4 E5
添加: A2
那么分别使用A1 B1 C2 D4 E5的compareTo,但是这写对象的存放位置(地址)并不一定是连续的,那搜索这些对象的时间就成了开销。
如果使用的是A2的compareTo,那么每次就需要该A2的compareTo,省去了搜索的时间开销。
当然一个集合中数据量大的时候,才会有所体现。并且这部分只是个人理解,还望指正。
希望能和楼主交流~ |