在Scala中定义自定义HashSet?

时间:2015-11-02 16:23:14

标签: scala hashset scala-collections

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

Java方式:

在java中我只是创建一个自定义类,在该自定义类中覆盖哈希和相等的方法,我将完成。

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

Scala方式(Scala新手):

Introduction to Sets and Maps for Scala

在这里,我很难在特质,类和对象之间进行选择。显然,在第一眼看来我不能将特性和类分配给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

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

请注意,HashSets具有类型参数,就像在Java中一样。对于不可变集合,语法略有不同,但是从Java中获取这将会更容易。

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

相关问题