美文网首页
jdk中的set是如何保证元素不相同的

jdk中的set是如何保证元素不相同的

作者: HatiJEAGERJAQUE | 来源:发表于2017-01-26 22:36 被阅读0次

HashSet源代码:

这里以Hashset为主要例子

从以上的源代码可以看出HashSet中真正管理元素的是  private transient  HashMap<E,Object> map;并且HashSet的元素是存储在HashMap中的key中的,了解HashMap的人知道key是不能重复的。

HashSet的addAll方法:

下面通过一个例子来debug HashSet的add方法的具体实现

上述代码很容易看出,先在构造的时候就加入了hello,world,java这三个元素,之后又通过addAll方法将元素重新添加一遍(addAll实际是循环add)。debug发现进入了AbstractCollection的addAll

继续debug,画红线的add是由HashSet的add方法完成的。

PRESENT在图一中有,是object实例,实际中是不需要管理的。

一些简单的实验:

在AbstractCollection的addAll方法中modified一开始是false,只有成功add一次才会变成true,而返回的结果是由map put的返回值与null比较所得(map.put(e,PRESENT)==null;)。

从返回结果可以看出addAll没有一次是add成功的,这也证实了set没有元素是重复的。最后set输出也只有一组hello,world,java。

补充一点:HashMap在put时是有返回值的,当key重复时会返回value,否则返回null(可以看源码)。

相关文章

  • jdk中的set是如何保证元素不相同的

    HashSet源代码: 这里以Hashset为主要例子 从以上的源代码可以看出HashSet中真正管理元素的是 p...

  • 集合类(二)

    Set如何保证元素不重复? 在Java的Set体系中,根据实现方式不同主要分为两大类。HashSet和TreeSe...

  • Java中的集合(三):Set

    Set是无序且元素不可重复的集合 首先介绍一下Set是怎样保证元素不会重复的。当向Set中插入数据时,会首先调用元...

  • MS-Redis-SortedSet

    SortedSet是Set的一个升级,Set的元素顺序是没有保证的,pop的顺序也就无法保证。SortedSet跟...

  • JD、QQ12

    1、set集合从原理上如何保证不重复 1)在往set中添加元素时,如果指定元素不存在,则添加成功。也就是说,如果s...

  • 2020-10-22--集合

    1.set1.1、set和list有一个不同点就是set不可以存放重复的元素而list可以。set如何保证这一特点...

  • Java基础笔记总结(10)-集合(2)Set集合 HashSe

    Set集合 -----保证元素唯一 HashSet实现了Set接口,不保证set的迭代顺序,允许存储null值 H...

  • (PHP)redis Set(集合)操作

    /** Set操作 集合命令 保证数据的唯一 不保证顺序 */ //将一个元素加入集合,已经存在集合中的元素则忽略...

  • redis sadd 使用和优化案例

    redis 集合结构介绍 redis集合(Set)结构类似java中的set,可以保证元素的唯一性,而sadd命令...

  • 深入了解TreeSet

    Java中的TreeSet是Set的一个子类,TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯...

网友评论

      本文标题:jdk中的set是如何保证元素不相同的

      本文链接:https://www.haomeiwen.com/subject/neqfittx.html