黑马程序员技术交流社区

标题: 集合Set体系 [打印本页]

作者: 52java    时间: 2016-9-6 22:27
标题: 集合Set体系
        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()方法比较各个属性值。
                                                如果相同:说明是同一个对象,不添加
                                                如果不同:说明不是同一个对象,就添加
                       
作者: 老爹很帅    时间: 2016-9-6 22:29
今天学完真的很懵




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