首页 文章

在Scala中定义自定义HashSet?

提问于
浏览
0

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

Java way:

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

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

Scala way (Scala newbie):

Introduction to Sets and Maps for Scala

在这里,我很难在特质,类和对象之间进行选择 . 显然,在第一眼看来我不能将特性和类分配给var / val(如果可以做到,请告诉我) . 所以对象就是要走的路 .

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

Question 1: How should I define a custom (class/trait/object) HashSet?

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

Question 2: How to assign value to the new object? for example,

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

Error : type mismatch; found : Int(100) required: Int.type

谢谢

1 回答

  • 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 时,您基本上定义了一个具有单个实例的类(单例模式) . 这显然不是你想要的 .

相关问题