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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 52java 中级黑马   /  2016-9-6 22:27  /  468 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        Set 体系: 无序,唯一
                HashSet: 底层数据结构是哈希表。线程不安全,效率高。
                        //同一个对象哈希值肯定相同,不同对象哈希值一般不同(比如说:"儿女","农丰"的哈希值就相同)。
                        // 重地 通话
                        //HashSet集合存储自定义类型的元素,想保证元素的唯一性,该类必须重写hashCode()和equals()方法。

                LinkedHashSet:
                        是HashSet类的子类,也是Set体系中唯一一个存取一致(有序)的集合。线程不安全,效率高。
                                 
                HashSet 保证元素唯一性的原理:
                        HashSet 保证元素的唯一性底层依赖  hashCode()和equals()方法。
                判断流程:
                        //   比较哈希值                &&           (比较地址值          ||  比较属性值)
                        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {        //参考HashMap#put();
                          //不添加
                        }
                解释:
                        先比较两个元素的哈希值是否相同,
                                如果不相同:说明不是同一个对象,就直接添加。
                                如果相同: 接着比较地址值(这样做是为了提高效率)。
                                        如果相同:肯定是同一个对象,不添加。
                                        如果不同:接着通过equals()方法比较各个属性值。
                                                如果相同:说明是同一个对象,不添加
                                                如果不同:说明不是同一个对象,就添加
                       

1 个回复

倒序浏览
今天学完真的很懵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马