Java基础-集合:set

本文详细解析了无序的哈希集合(如HashSet)和有序的TreeSet中元素的添加过程,重点介绍了哈希值计算、冲突解决(单链表法)、equals方法应用,以及数据结构底层的数组+链表实现。同时强调了重写hashcode和equals方法的重要性。
摘要由CSDN通过智能技术生成
  • 1.无序性:不等于随机性。存储的数据在数组中并非按照数组索引的顺序添加,根据数据的哈希值添加
    *
    • 2.不可重复性:保证添加的元素按照equals()判断时,不能返回true,即:相同的元素只能添加一次
    • 二。添加元素过程:以hashSet为例:
    •  向HashSet中添加元素时,首先调用元素a的hashcode方法,计算其哈希值,
      
    •  此哈希值对底层数组长度进行取模求其存放的位置,判断此位置是否有元素:
      
    •      如果没有其它元素,则元素a添加成功
      
    •      如果有其它元素(有可能是单个元素或是以链表形式存在的多个元素),则比较元素a与该位置的其它元素hash值:
      
    •          如果hash值不同,则元素a添加成功
      
    •          如果hash值相同,进而去调用equals方法去比较:
      
    •              如果equals方法返回true,则元素a添加失败
      
    •              如果equals方法返回false,则元素a添加成功
      
    •   注意:如果元素a添加成功且该位置已有其它元素,则在其添加位置以链表方法存储
      
    •   jdk7:a放在数组中,指向原有的元素
      
    •   jdk7:原有的元素放在数组中,指向a
      
    •   HashSet底层:数组+链表(jdk7)
      
    • 向HashSet中添加数据时一定要重写hashcode和equals方法
    • 向TreeSet中添加数据时,必须数相同类的对象,需要实现Comparable接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值