集合框架 ---set

集合框架Set

1.list集合去重及其底层原理
2.集合框架Set(HashSet哈希表存储、重复元素存储底层探究)
3.集合框架TreeSet(自然排序、比较器排序)
4.泛型简介

1.list集合去重及其底层原理

对象重复是指对象里面的变量的值都相等,并不定是地址。list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。

当set集合存储的是对象类型时,需要在对象的实体类里面重写public boolean equals(Object obj) {} 和 public int hashCode() {} 两个方法。
在这里插入图片描述

2.Set注重独一无二的性质,该体系集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。对象的相等性本质是对象hashCode值(java是依据对象的内存地址计算出的此序号)判断的,如果想要让两个不同的对象视为相等的,就必须覆盖Object的hashCode方法和equals方法。

HashSet哈希表

哈希表边存放的是哈希值。HashSet存储元素的顺序并不是按照存入时的顺序(和List显然不 同) 而是按照哈希值来存的所以取数据也是按照哈希值取得。元素的哈希值是通过元素的 hashcode方法来获取的
HashSet通过hashCode值来确定元素在内存中的位置。一个hashCode位置上可以存放多个元素。

HashSet哈希表存储
在这里插入图片描述

HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较 equals方法 如果 equls结果为true ,HashSet就视为同一个元素。如果equals 为false就不是 同一个元素
List与Set判断重复对象的区别?

3.集合框架TreeSet(自然排序、比较器排序)

TreeSet数据结构(二叉树)

TreeSet()是使用二叉树的原理对新add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。
Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自 己定义的类必须实现Comparable接口,并且覆写相应的compareTo()函数,才可以正常使 用。
在覆写compare()函数时,要返回相应的值才能使TreeSet按照一定的规则来排序
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整 数、零或正整数。

自然排序(Comparable):
使得添加的元素自身具备排序规则,这种排序规则又被称为自然排序
比较器排序(Comparator):
作用:使得容器具有比较性

例举比较器排序:
在这里插入图片描述

4.泛型简介

泛型的作用:
1.将运行时的异常转移到编译器
2.提升了代码的健壮性

例:已经将编译器错误的错误注释了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/dl990813/article/details/90417404
今日推荐