当前位置: 首页 > 面试题库 >

Java-TreeSet和hashCode()

子车雅珺
2023-03-14
问题内容

我有一个关于TreeSet集合和hashCode方法的快速问题。我有一个TreeSet对象,并且我要向其中添加对象,然后再添加对象,然后TreeSet使用来检查它是否存在contains

我有2个不同的对象,每个对象使用我对hashCode方法的实现产生一个不同的hashCode,如下例:

public int hashCode()
{
    int hash = 7;
    hash = hash * 31 + anAttribute.hashCode();
    hash = hash * 31 + anotherAttribute.hashCode();
    hash = hash * 31 + yetAnotherAttribute.hashCode();
    return hash;
}

特定运行的hashCode为:76126352和76126353(对象在一个属性中仅相差一位数字)。

即使hashCodes不同,contains方法对于这些对象也将返回true。有什么想法吗?这确实令人迷惑,我们将不胜感激。


问题答案:

TreeSet根本不使用hashCode。它使用compareTo或传递给构造函数的Comparator。诸如contains之类的方法使用它来查找集合中的对象。

因此,问题的答案是定义了compareTo方法或Comparator,以便将所讨论的两个对象视为相等。

从javadocs:

TreeSet实例使用其compareTo(或compare)方法执行所有元素比较,因此从集合的角度来看,此方法认为相等的两个元素相等。



 类似资料:
  • 主要内容:1 什么是Java TreeSet,2 Java TreeSet的层次结构,3 Java TreeSet的语法,4 Java TreeSet的构造方法,5 Java TreeSet的方法,6 Java TreeSet示例1,7 Java TreeSet示例2,8 Java TreeSet示例3,9 Java TreeSet示例4,10 Java TreeSet示例51 什么是Java TreeSet Java TreeSet类实现了Set接口,TreeSet接口使用树结构进行存储。Tr

  • 问题内容: 我一直都喜欢树木,它们的优美和整洁。但是,我认识的每个软件工程师都曾明确地问过我为什么要使用。从CS的背景出发,我认为你使用的所有内容都不重要,并且我也不在乎哈希函数和存储桶(对于)。 在哪种情况下,我应该使用 over ? 问题答案: HashSet比TreeSet快得多(对于大多数操作(如添加,删除和包含),恒定时间与日志时间相对应),但没有提供像TreeSet这样的排序保证。 H

  • 本文向大家介绍详解Java中HashSet和TreeSet的区别,包括了详解Java中HashSet和TreeSet的区别的使用技巧和注意事项,需要的朋友参考一下 详解Java中HashSet和TreeSet的区别 1. HashSet HashSet有以下特点: 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是null,但只能放入一个null 当向HashSet集合中存入一

  • TreeSet提供了使用树进行存储的Set接口的实现。 对象按排序和升序存储。 访问和检索时间非常快,这使得TreeSet成为存储必须快速找到的大量排序信息的绝佳选择。 以下是TreeSet类支持的构造函数列表。 Sr.No. 构造函数和描述 1 TreeSet( ) 此构造函数构造一个空树集,该树集将根据其元素的自然顺序按升序排序。 2 TreeSet(Collection c) 此构造函数构建

  • 问题内容: 最近,我遇到了一些Java代码,这些代码简单地将一些字符串放入Java TreeSet中,为其实现了基于距离的比较器,然后在日落时分快乐地计算出给定的分数来解决给定的问题。 我的问题 是否有适用于Python的等效数据结构? Java树集看起来基本上是一个有序字典,可以使用某种比较器来实现这种排序。 我看到有一个用于 OrderedDict的Py3K的PEP,但是我使用的是2.6.x。

  • 本文向大家介绍在Java中将HashSet转换为TreeSet,包括了在Java中将HashSet转换为TreeSet的使用技巧和注意事项,需要的朋友参考一下 首先,创建一个具有字符串值的HashSet- 现在,将HashSet转换为TreeSet- 示例 以下是在Java中将HashSet转换为TreeSet的程序- 输出结果