use*_*934 5 java oop loops equals
说如果有两个字符串或任何对象,并且我想检查两个对象是否相同,我会这样做,那就可以了string1.equals(string2)。现在,如果有三个对象,我想看看它们是否相等,那么我会string1.equals(string2) && string2.equals(string3)说四个,依此类推,只有给出了参数的大小,这才有可能。如果我将对象传递给方法,那么检查所有元素是否相等的最有效方法是什么。我写
private static boolean equals(Object... objects) {
    Object obj = objects[0];
    boolean flag = false;
    for (Object object : objects) {
        if (object.equals(obj)) {
            flag = true;
        } else {
            flag = false;
            break;
        }
    }
    return flag;
}
但是,当我向专业程序员展示此方法时,他们指出这是一种非常低效的方法。如果我想检查所有元素是否都是唯一的,那将如何工作?是否有任何有效且简洁的方法来检查n个元素的相等性或不重复性?
您可以尝试使用该Set界面。如果你还不熟悉 Sets,请引用Java 文档
Set 是不能包含重复元素的集合。它对数学集合抽象进行建模。Set接口仅包含从Collection继承的方法,并添加了禁止重复元素的限制。Set 还对 equals 和 hashCode 操作的行为添加了更强大的契约,允许 Set 实例进行有意义的比较,即使它们的实现类型不同。如果两个 Set 实例包含相同的元素,则它们相等。
由于 Set 不能包含重复元素,因此 Set 的大小始终为 1,除非向其添加不同的元素,或者换句话说,Set 的大小永远不会等于传递的元素的大小,除非它们都是唯一的。在你的情况下它会是
private static boolean equals(Object... obj) {
   Set<Object> set = new HashSet<>(Arrays.asList(obj));
   return set.size() == 1; // Size of the Set should be one if all elements are same.
}
如果您希望检查所有元素是否唯一,您可以检查 的大小Set和传递的元素的大小是否相同。