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

如何定义我自己的元素类以用于Set

巫马阳飙
2023-03-14
问题内容

我有以下代码:

public class MyElement {
    String name;
    String type;

    MyElement(String name, String type) {
        this.name = name;
        this.type = type;
    }
}

public class Test {

    public static void main(String[] args) {
        Set<MyElement> set = new HashSet<MyElement>();
        set.add(new MyElement("foo", "bar"));
        set.add(new MyElement("foo", "bar"));
        set.add(new MyElement("foo", "bar"));
        System.out.println(set.size());
        System.out.println(set.contains(new MyElement("foo", "bar")));
    }
}

当执行时返回:

3

false

我本来希望结果是1和true。为什么我的元素没有被认为是相同的,我该如何纠正?谢谢,韦恩。


问题答案:

您需要实现equals(Object o)hashCode()每总承包合同MyElement。如果没有,Set.contains()将使用默认实现比较对象的内存地址。由于要在contains调用中创建MyElement的新实例,因此它会返回false。



 类似资料:
  • 问题内容: 我正在阅读另一个SO问题,即Swift do-try-catch语法。在他的回答中, rickster 为OP的自定义类创建了扩展。 Konrad77 评论说,这是“保持代码整洁的好方法。” 我尊重他们的知识,这使我相信我在自己的代码中遗漏了一点。 除了为我创建的类创建扩展之外,还有其他好处(除了整洁)还是原因?我可以将相同的功能直接放入类中。如果我是唯一使用该类的人,或者其他人将使用

  • 好的,在laravel 4中,如果我想添加自己的自定义类,例如:库\myFunction.php然后我执行以下步骤: 添加myFunctions.php到app/库/myFunctiosn.php 在app/start/global.php,在ClassLoader::addDirectory(数组(,我添加app_path()。 为了在我的刀片视图中调用它,我添加了以下代码 它是有效的。 但是如

  • 我想创建我自己的地图减少工作。 map类的输出是:文本(键)、文本(值) reduce类的输出是:文本,不可扭曲 我试图通过以下方式实现它: 当我尝试运行它时,它会显示以下输出并终止 错误的课程从哪里来? 和 工作失败的原因 我不明白哪里出了问题。任何帮助

  • 我正在使用reverfit2、rxjava2和adapter-rxjava来实现我的http api调用。 如果我有很多api需要实现,并且每个单独的api实现都需要添加这两行: 我不想在每个api实现中添加它们。我想使用MyObservable作为api定义的结果类型。 我的想法如下所示: 我在https://github.com/square/reverfit/blob/master/reve

  • 问题内容: 我需要在cfml页面中使用自己的java类。 文档中的此项听起来不错,但没有说明我必须创建哪些文件。 我试图在网站根目录下创建一个页面。然后将+ 放在同一路径中。但这会导致错误“找不到类”! 你能帮我么? 问题答案: 同一路径中的TestClass.java + TestClass.class。 您不能仅将文件放置在任何地方。CF服务器启动时, 仅 检查类/ jar的特定位置。这些位置

  • 在调用时自定义元素的类,即在调用类名时。 语法 (Syntax) import Ember from 'ember'; export default Ember.Component.extend ({ classNames: ['name_of_class'] }); 例子 (Example) 下面给出的示例指定在调用时自定义元素的类。 创建一个名为post-action的组件,该组件将在