架构师数据结构技术Day03-集合之Set
Posted 攻城狮Chova
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构师数据结构技术Day03-集合之Set相关的知识,希望对你有一定的参考价值。
Set
- Set: 具有元素唯一性.该集合可以知道某个元素是否已经存在于集合中 ,Set中不会存在重复元素
- Set用于存储不重复的无序元素 ,Set集合中的元素存入和取出的顺序不一定相同
对象相等
- 引用到堆上同一个对象的两个引用是相等的:
- 如果对两个引用调用hashCode() 方法,会得到相同的结果
- 如果对象所属的类没有重写Object的hashCode() 方法,那么hashCode() 方法会返回每个对象特有的hashCode值.这两个对象的hashCode值是不相等的
- 要使得两个不同的对象相等:
- 要重写Object中的hashCode() 方法和equals() 方法
- 因为Object中的hashCode() 方法返回的对象的内存地址,所以必须重写hashCode() 方法才能保证两个不同的对象具有相同的hashCode值,同时也需要两个不同的对象调用equals方法返回true
HashSet
- Hash表中存放的是哈希值hashcode
- HashSet中存储的元素是无序的
- HashSet存储元素的顺序不是按照存入时的顺序而是按照hashcode的顺序存储元素的
- 所以读取元素也是按照hashcode顺序
- HashSet通过使用hashcode和equals来保证不存入重复的元素:
- HashSet通过元素的hashcode() 和equals() 方法来判断元素是否重复
- HashSet首先获取对象的hashcode值来得到对象的加入位置,同时和其余元素的hashcode值进行比较,如果不同元素的hashcode值不相等,那么就认定这两个对象就是不同的元素,将元素加入到HashSet中
- 如果多个元素的hashcode值相同,就继续使用equals() 进行比较.如果equals() 返回true. 那么就认定这两个对象是相同的元素,加入HashSet失败
- 如果多个元素的hashcode值相同,继续使用equals() 进行比较 ,equals() 返回false. 那么这两个对象不是同一个元素.这样的hashcode值相同equals() 方法比较为fasle的两个元素会在同一个hashcode值下顺延,可以认为两个hashcode值相同的元素存储在一个哈希桶中
- 哈希桶: 一个hashcode值的位置上可以存放多个元素
- 自定义类对象时需要重写对象的hashcode() 方法,确保对象具有相同的hashcode值
TreeSet
有序性
- TreeSet中存储的元素是有序的
- TreeSet中元素的排序规则:
- 存入的元素自定义比较规则
- 元素自身具备比较性
- 元素实现Comparable接口,重写compareTo() 方法.使得元素自身具备了比较性
- 这种方式称做元素的自然排序.默认排序方式
- 指定TreeSet的比较规则
- 元素自身不具备比较性,或者是自身具备的比较性不是排序所需要的比较性.此时可以使得容器本身具备比较性
- 定义一个类实现Comparator接口,重写compare() 方法,并且将接口的子类实例对象作为参数传递给TreeMap集合的构造方法
- 存入的元素自定义比较规则
- 注意:
- 同时使用Comparable和Comparator两种比较方式时,以Comparator的比较方式为主
- 重写compareTo() 方法和compare() 方法时,必须要明确比较的主要条件相等时要比较的次要条件
- 存入TreeSet中的元素要具备比较性
唯一性
- TreeSet属于Set集合,集合中的元素是不能重复的
- TreeSet中保证数据的唯一性:
- TreeSet通过compareTo() 方法或者compare() 方法来保证元素的唯一性
- TreeSet中加入的元素实现Comparable接口或者Comparator接口,当使用compareTo() 方法或者compare() 方法比较返回值为0时,说明两个对象相等,也就是两个元素重复,元素不会加入到TreeSet中
LinkedHashSet
- LinkedHashSet会保证元素的插入顺序
- LinkedHashSet中的元素按照元素的插入顺序排序
总结
- Array => 索引位置
- Link => 插入的第一个元素fisrt, 插入的最后一个元素last
- Hash => 对象的hashcode和equals() 方法
- Tree => 比较接口Comparable和比较接口Comparator
以上是关于架构师数据结构技术Day03-集合之Set的主要内容,如果未能解决你的问题,请参考以下文章