黑马程序员技术交流社区

标题: 集合中的问题 [打印本页]

作者: 起猿    时间: 2013-11-3 23:50
标题: 集合中的问题
实现comparator 接口中的compare方法,返回值要么是0,要么是正数或者负数。而treeset是怎么根据这三种返回值来进行排序的呢?系统默认要通过其他方法来运算么?
作者: ヅ飞飞    时间: 2013-11-4 00:21
TreeSet集合内部是使用二叉树结构来存储数据的,
当元素存入TreeSet集合时,会与二叉树跟节点比较(比较方式就是调用compare方法或compareTo方法),
返回值是-1即元素小于根节点则继续比较左节点,若返回值是1则比较右节点,返回值为0说明是重复元素不存入不再判断。
小于比较左节点,大于比较右节点,反复重复该规则比较元素,直到比较到最后一个元素,然后存入。
随意依次这样比较大小的存入元素使得TreeSet具备了有序性。
作者: 冯国强    时间: 2013-11-10 22:34
这涉及到了TreeSet底层使用的是二叉树数据结构,返回来的负整数,零,正整数。首先,第一个作为二叉树的根节点,第二个与第一个比较,如果返回正整数,第二个数大于第一个数则排在第一个元素的(即根节点)的右节点,如果返回负整数,代表小于第一个元素,排在根节点的左节点处;若返回零,则代表等于第一个元素,则两边都可以;开始继续比较。当比较完后,通过二叉树的先序遍历则可以读出有序的元素序列。
作者: hurryup    时间: 2013-11-11 10:03
学习了~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2