【问题标题】:Define custom HashSet in Scala?在 Scala 中定义自定义 HashSet?
【发布时间】:2016-02-02 14:37:07
【问题描述】:

基本上我有三个变量 a、b 和 c。变量之间有一定的关系。我需要将变量存储在 HashSet 中,这样每个变量都会不同,不会有任何冗余。

Java方式:

在 java 中,我只需创建一个自定义类,覆盖该自定义类中的 hash 和 equal 方法,我就完成了。

HashSet<CustomClass> hSet = new HashSet<CustomClass>();

Scala方式(Scala新手):

Introduction to Sets and Maps for Scala

在这里,我很困惑在 trait 、 class 和 object 之间进行选择。显然,乍一看,我不能将特征和类分配给 var / val (请让我知道上述是否可以完成)。所以对象是要走的路。

object State {
    var a: Int;
    var b: Int;
    var c: Int;
}

问题 1: 我应该如何定义自定义(类/特征/对象)HashSet?

Scala 中的普通 HashSet 声明:var hSet = new HashSet();

问题 2: 如何为新对象赋值?例如,

var newState = State;
newState.a = 100;
hSet.add(newState);

错误:类型不匹配;发现:需要 Int(100):Int.type

谢谢

【问题讨论】:

  • 最简单和最常用的方法是为您的元素使用case class
  • 我是 Scala 新手。谢谢,我会查一下。

标签: scala hashset scala-collections


【解决方案1】:

简短的回答是:Scala 方式与 Java 方式相同。也就是说,案例类可以通过自动构造有效的哈希和等于方法(以及toStringapply)来帮助您。它是这样的:

case class MyClass(myInt: Int, myString: String)
val hSet = new mutable.HashSet[MyClass]();
hSet += MyCLass(2, "foo") 

请注意,HashSet 具有类型参数,就像在 Java 中一样。对于不可变集合,语法略有不同,但如果来自 Java,这会感觉更容易。

此外,当您定义 object 时,您基本上是在定义一个具有单个实例的类(单例模式)。这显然不是你想要的。

【讨论】:

    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多