总结基础理论Set集合·1

来源:互联网 发布:淘宝网什么卖的最火 编辑:程序博客网 时间:2024/05/22 13:14

Set接口

查阅Set集合的API介绍,通过元素的equals方法,来判断是否为重复元素,它是个不包含重复元素的集合。Set集合取出元素的方式可以采用:迭代器、增强for。

Set集合中有三个特点:
1.无下标 2.无序(LinkedHashSet和TreeSet除外) 3.不能重复

Set集合有多个子类,这里我们介绍其中的HashSet、LinkedHashSet这两个集合。

HashSet:采用了哈希表结构
LinkedHashSet:采用了链表+哈希表结构


HashSet集合介绍

查阅HashSet集合的API介绍:此类实现Set接口,由哈希表支持(实际上是一个 HashMap集合)。HashSet集合不能保证的迭代顺序与元素存储顺序相同。

HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。

简单说 hashCode()判断哈希码值是否一样,如果哈希码值一样,比如“重地”和“通话”,“abc”和“acD”,再用equals()判断内容是否一样。

在介绍下

HashSet集合存储数据的结构(哈希表)

Set的底层可以理解为就是哈希

什么是哈希 呢?

哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表。

当向哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object类中的hashCode方法。由于任何对象都是Object类的子类,所以任何对象有拥有这个方法。即就是在给哈希表中存放对象时,会调用对象的hashCode方法,算出对象在表中的存放位置,这里需要注意,如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,如果返回的是false,就会把这个值存放在哈希表中。

注意:String类重写了hashcode方法,按照自己的方式计算,”abc”和”acD”哈希值相同

总结:保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。

HashSet判断元素是否重复原理

Set集合不能存放重复元素,其添加方法在添加时会判断是否有重复元素,有重复不添加,没重复则添加。

HashSet集合由于是无序的,其判断唯一的依据是元素类型的hashCode与equals方法的返回结果。规则如下:

先判断新元素与集合内已经有的旧元素的HashCode值

l  如果不同,说明是不同元素,添加到集合。

l  如果相同,再判断equals比较结果。返回true则相同元素;返回false则不同元素,添加到集合。

所以,使用HashSet存储自定义类型,如果没有重写该类的hashCode与equals方法,则判断重复时,使用的是地址值,如果想通过内容比较元素是否相同,需要重写该元素类的hashcode与equals方法。

hashCode()和equals()运行机制大致如下,31是一个科学的数字,大概率保证唯一。

  publicint hashCode() {

        finalint prime = 31;

        int result = 1;

        result = prime * result + age;

        result = prime * result + ((name ==null) ? 0 : name.hashCode());

        return result;

    }

    @Override

    publicboolean equals(Object obj) {

        if (this == obj)

           returntrue;

        if(!(obj instanceof Student)){

           System.out.println("类型错误");

           returnfalse;


LinkedHashSet相对于HashSet是有序的,没太大区别。我认为重点还是理解Hash表结构和去重原理。




阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老公不孕爸爸播种 老公不孕公公播种 蚕豆什么时候播种 番茄什么时候播种 芦笋什么时候播种 蒲公英靠什么播种 麦子什么时候播种 多肉植物怎么播种 芝麻什么时候播种 雏菊什么时候播种 黑麦草什么时候播种 薰衣草什么时候播种 三叶草什么时候播种 大白菜什么时候播种 万寿菊什么时候播种 金鱼草什么时候播种 太阳花什么时候播种 除虫菊什么时候播种 金鸡菊什么时候播种 四季豆什么时候播种 西葫芦什么时候播种 虾播 主播送礼物给粉丝都送什么 播音 播音专业 播音稿件 播音腔 播音绕口令 在播音室一边干一边播音 校园播音稿 学播音 播音与主持 播音737 播音艺考 播音稿子 播音软件 播音系 播音男生嗓子被灼伤 播音男生嗓子被灼伤y 文字转语音播音系统 播音自备稿件