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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangjie084 中级黑马   /  2016-6-5 19:18  /  424 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set: 元素唯一  存入和取出的顺序不同 无索引
        HashSet:元素唯一
                HashSet是如何保证元素的唯一性的呢?
               
                底层依赖两个方法 equals和hashCode()方法
                        先比较元素的hashCode()返回值,
                                如果值相同:调用equals方法
                                        如果equals方法返回true:说明相同 则不添加该元素
                                        如果返回false :说明不同 则添加该元素
                                如果值不相同:就直接添加
                                所以说为了提高效率(也就是减少equals的比较次数),我们要让hashCode()尽量返回不同的值
               
                所以说我们为了保证HashSet存入元素的唯一性,需要让元素所在的类重写 equals()和hashCode()
                        hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
                        equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
                如何敲出来呢:eclipse自动生成
                        eclipse自动生成的hashCode()里面 为什么是31?
                         * 1:31是一个质数,质数是能被1和自己本身整除的数
                         * 2:31这个数既不大也不小
                         * 3:31这个数好算,2的五次方-1,2向左移动5位

0 个回复

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