A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 起猿 中级黑马   /  2013-11-3 23:50  /  1178 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

实现comparator 接口中的compare方法,返回值要么是0,要么是正数或者负数。而treeset是怎么根据这三种返回值来进行排序的呢?系统默认要通过其他方法来运算么?

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
TreeSet集合内部是使用二叉树结构来存储数据的,
当元素存入TreeSet集合时,会与二叉树跟节点比较(比较方式就是调用compare方法或compareTo方法),
返回值是-1即元素小于根节点则继续比较左节点,若返回值是1则比较右节点,返回值为0说明是重复元素不存入不再判断。
小于比较左节点,大于比较右节点,反复重复该规则比较元素,直到比较到最后一个元素,然后存入。
随意依次这样比较大小的存入元素使得TreeSet具备了有序性。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
这涉及到了TreeSet底层使用的是二叉树数据结构,返回来的负整数,零,正整数。首先,第一个作为二叉树的根节点,第二个与第一个比较,如果返回正整数,第二个数大于第一个数则排在第一个元素的(即根节点)的右节点,如果返回负整数,代表小于第一个元素,排在根节点的左节点处;若返回零,则代表等于第一个元素,则两边都可以;开始继续比较。当比较完后,通过二叉树的先序遍历则可以读出有序的元素序列。
回复 使用道具 举报
学习了~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马