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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© F灬灬 中级黑马   /  2015-8-28 18:10  /  456 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

TreeSet底层数据结构:二叉树结构
     TreeSet存储数据方式:
               A:第一个添加的数据作为根结点。
               B:从第二个开始:
                                   每个数据从根结点开始比较,如果大了,往右放,小了,往左边放,如果相同,替换。
     TreeSet的获取规则:从根节点开始,获取数据规则,是按照每个数据的左中右原则。
TreeSet保证元素排序有两种方式:
     A:自然顺序 让对象所属的类去实现Comparable接口,无参构造。     
               在自然排序中,根据返回值保证排序。
               正数:说明元素比以前的元素大,往后放。
               负数:说明元素比以前的元素小,往前方。
                 零 :元素就不参加到集合中,这就是保证唯一性的原理。
     B:比较器接口,Comparator带参构造。
  HashSet底层数据结构:哈希表。
     哈希表:根据哈希算法存储的,存储的就是对象的哈希值。
     由于不同对象的哈希值不一样,所以6个对象全部存储成功,没有去掉重复值。
     解决方法:我们想去掉重复值,首先重写hashCode(),返回值 是0;
     接着重写了equals()方法,比较对象成员变量
     重写之后,哈希值都是0。这个时候存储,哈希表结构,提供哈系统结构。这个结构在处理哈希值都相同的情况。当哈希值相同的时候,对象会存储到一个桶结构中,看源码后,还是会继续走equals()方法看成员变量值是否相同。
     可以去重了,但是效率降低了,需要重写两个方法hashCode()和equals()。
     一般来说我们在hashCode()方法上不会直接返回一个固定值,这个值应该是变化的,这个方法和对象成员变量相关,我们只需要把对象成员变量值相加即可。
     公式:引用数据类型.hashCode()+基本数据类型*x(非固定值)。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马