首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Scala中定义自定义HashSet?

在Scala中定义自定义HashSet?
EN

Stack Overflow用户
提问于 2015-11-02 16:23:13
回答 1查看 492关注 0票数 1

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

Java方法:

在java中,我只需创建一个自定义类,重写该自定义类中的散列和相等的方法,我就可以完成了。

代码语言:javascript
运行
复制
HashSet<CustomClass> hSet = new HashSet<CustomClass>();

Scala way (Scala新手):

Scala集和映射简介

在这里,我很困惑如何在特质、类别和对象之间做出选择。显然,在第一次查看时,我不能将属性和类分配给var / val (请告诉我上面是否可以这样做)。所以,物体是要走的路。

代码语言:javascript
运行
复制
object State {
    var a: Int;
    var b: Int;
    var c: Int;
}

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

Scala中的正常HashSet声明:var hSet = new HashSet();

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

代码语言:javascript
运行
复制
var newState = State;
newState.a = 100;
hSet.add(newState);

错误:类型错配;找到: Int(100)必需: Int.type

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-02 17:07:01

简单的回答是: Scala方法和Java方法是一样的。也就是说,case类可以通过自动构造有效的散列和等于方法(以及toStringapply )来帮助您。事情是这样的:

代码语言:javascript
运行
复制
case class MyClass(myInt: Int, myString: String)
val hSet = new mutable.HashSet[MyClass]();
hSet += MyCLass(2, "foo") 

注意,HashSets有类型参数,就像在Java中一样。对于不可变集,语法略有变化,但从Java开始使用时会感觉更容易一些。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33482239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档