当前位置: 首页 > 网络应用技术

标签如何确保不重复元素?

时间:2023-03-08 22:03:14 网络应用技术

  HashSet实现集合界面,该接口由哈希表(实际上是哈希图)支持。HashSet不能保证集合的迭代顺序,而是允许插入null值。相同的迭代顺序是相同的。HASHSET具有除臭化的特征,也就是说,它可以自动过滤集合中的重复元素,以确保存储在标签中的元素是唯一的。

  主题集的基本操作方法是:add(add),删除(删除),包含(确定是否存在某个元素)和大小(设置号)。这些方法的性能是固定的操作时间。Hashset基本上使用如下。:

  标签不能保证插入元素的顺序和循环输出元素的顺序必须相同,也就是说,主题集实际上是一个无序的收集。特定代码如下:

  上述程序的执行结果如下:

  从上面的代码和执行结果中可以看出,哈希集插入的顺序为:深圳 - > beijing-> xi'an,但是循环打印的顺序为:xi'an--> shenzhen-> beijing,所以哈希设置是无序的,无法保证插入插入。迭代顺序是一致的。

  PS:如果要确保插入顺序和迭代顺序是一致的,则可以使用linkedhashset替换标签。

  有人说,标签只能保证不重复基本数据类型,但不能保证不重复自定义对象吗?是吗?我们通过以下示例解释了这个问题。

  使用标签存储基本数据类型,实现代码如下:

  上述程序的执行结果如下:从上面的结果来看,可以看出,标签的使用可以确保不重复基本数据类型。

  接下来,将自定义对象存储到标签中,实现代码如下:

  上述程序的执行结果如下:从上面的结果来看,可以看出自定义对象的类型并不重,这意味着标签无法达到自定义对象类型的权重?,不,主题de -Heavy函数由hashcode判断,等于依赖元素的方法。这两种方法均返回到True,这是相同的对象,否则是不同的对象。可以实现先前的长类型元素的原因是因为长类型已重写了HashCode并等于方法。特定实施源代码如下:

  有关hashcode和equals的更多内容,请参阅:https://mp.weixin.qq.com/s/40zaejekqym3awk2ewirwa

  然后,如果要支持自定义对象以支持自定义对象,则只需要重写hashCode并等于自定义对象中的方法。特定的实施代码如下:

  运行上述代码,执行结果如下图所示:从上面的结果来看,可以看出先前的重复“ CAO CAO”很重。

  只要我们了解哈希集执行添加元素的过程,我们就可以知道为什么标签可以确保不重复该元素?添加的标签添加元素的执行过程是:添加对象添加到标题集时,HashSet,HashSet将首先计算对象的哈希码值以确定对象的位置。HASHSET假设对象不会重复出现,并且将插入对应的位置。目前,将调用对象的equals()方法检查对象是否真的相同。如果相同的情况相同,则标签不会让重复的对象添加到标签中,从而确保确保元素不重复的元素。

  为了更清楚地了解主题集的添加过程,我们可以尝试阅读主题集的特定实现源代码。标签添加方法的源代码如下(以下源代码基于JDK 8):

  从上面的源代码中,您可以在标签中看到添加方法。实际的呼叫是哈希图中的观点。然后,我们继续查看Hashmap中的PUT实施:

  从上面的源代码可以看出,hashmap中的put()方法调用putVal()方法,而putVal()的源代码如下:

  可以从上面的源代码中看到,当将键值放置在哈希姆普中时,该条目的存储位置是基于键的哈希库德()返回值确定的。如果两个键具有相同的哈希值,它将确定是否确定这两个元素键()的等于()是相同的。如果相同的话,它将返回true.false,表明Hashset的添加元素失败。没有重复。如果它不是重复的元素,则PUT方法最终将返回null,并且传递给标签的添加方法成功。

  主题集的底层由Hashmap实现。它可以实施重复元素的重型功能。如果存储自定义对象,则自定义对象必须重写哈希码并等于方法。hashset保证该元素不会重复哈希姆普的put方法。在存储之前,它是基于键的哈希码和平等确定的。如果存在,则不会重复它,以免重复该元素。

  本文包括一个git仓库,开源地址:https://gitee.com/mydb/interview

  死亡并没有震惊,没有任何理由生气。

  Blogger:POST -80S Programmer.Hobbies:阅读,写作和慢跑。

  公共帐户:Java中国社区