Java 这里用什么收藏
我想知道我应该用什么样的收藏品来达到这个目的: 要求Java 这里用什么收藏,java,collections,Java,Collections,我想知道我应该用什么样的收藏品来达到这个目的: 要求 必须包含元组 这些值之间没有关系(没有键值对) 只能包含唯一元组 等于 这里最好使用什么?A似乎符合您的标准。集合必须包含另一个集合或包含这两个值的自定义对象。a似乎符合您的条件。集合必须包含另一个集合或包含这两个值的自定义对象。使用任何集合(例如HashSet)。创建一个对象来表示元组,并正确地实现hashcode和equals。使用任意集合(例如HashSet)。创建一个对象来表示您的元组,并正确地实现hashcode和equals。使用
等于
这里最好使用什么?A似乎符合您的标准。集合必须包含另一个集合或包含这两个值的自定义对象。a似乎符合您的条件。集合必须包含另一个集合或包含这两个值的自定义对象。使用任何集合(例如HashSet)。创建一个对象来表示元组,并正确地实现hashcode和equals。使用任意集合(例如HashSet)。创建一个对象来表示您的元组,并正确地实现hashcode和equals。使用和实现您自己的元组类,如下所述,然后使用:
公共类元组{
T-v1;
tv2;
@凌驾
公共布尔等于(对象o){
如果(o==null){
返回false;
}
if(元组的o实例){
返回(v1.equals(o.v1)和&v2.equals(o.v2))
||(v1.equals(o.v2)和&v2.equals(o.v1));
}
返回false;
}
@凌驾
公共int hashCode(){
//如果a等于(b),则必须生成a.hashCode()==b.hashCode()
//下面的示例可能适用于您的concrete equals()
返回v1.hashCode()^v2.hashCode();
}
}
使用和实现您自己的元组类,如下所述,然后使用:
公共类元组{
T-v1;
tv2;
@凌驾
公共布尔等于(对象o){
如果(o==null){
返回false;
}
if(元组的o实例){
返回(v1.equals(o.v1)和&v2.equals(o.v2))
||(v1.equals(o.v2)和&v2.equals(o.v1));
}
返回false;
}
@凌驾
公共int hashCode(){
//如果a等于(b),则必须生成a.hashCode()==b.hashCode()
//下面的示例可能适用于您的concrete equals()
返回v1.hashCode()^v2.hashCode();
}
}
在番石榴上抢夺战利品在番石榴上抢夺战利品。上一个需求的关键(不关心元素的顺序)只是equals
的一个实现,它将不考虑顺序而工作。因此,没有一个Map(或类似的)集合在这两个值之间没有关系?根据定义,Map都是关于键值对的。未能实现的实现是不正确的,无法实现其契约。更大的问题是,Java中没有现成的元组实现。根据定义,映射意味着两个对象之间的关系。Map是一个数学术语,表示“如果我有钥匙,我可以找到目标”关系。一个集合在元素之间没有关系,您需要的是一组元组(两个项的对)。您只需要为元组编写代码(正确地实现equals和hashcode),其余的工作将由集合来完成。上一个需求的关键(不关心元素的顺序)只是equals
的一个实现,它将不考虑顺序而工作。因此,没有一个Map(或类似的)集合在这两个值之间没有关系?根据定义,Map都是关于键值对的。未能实现的实现是不正确的,无法实现其契约。更大的问题是,Java中没有现成的元组实现。根据定义,映射意味着两个对象之间的关系。Map是一个数学术语,表示“如果我有钥匙,我可以找到目标”关系。一个集合在元素之间没有关系,您需要的是一组元组(两个项的对)。您只需要为元组编写代码(正确地实现equals和hashcode),其余的工作将由集合来完成。
public class Tuple<T> {
T v1;
T v2;
@override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (o instanceof Tuple) {
return (v1.equals(o.v1) && v2.equals(o.v2))
|| (v1.equals(o.v2) && v2.equals(o.v1));
}
return false;
}
@override
public int hashCode() {
// must produce a.hashCode() == b.hashCode() if a.equals(b)
// example below may or may not work for your concrete equals()
return v1.hashCode() ^ v2.hashCode();
}
}