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();
        }
    }