我试图确定列表中的所有元素是否相同。
如:

(10,10,10,10,10) --> true
(10,10,20,30,30) --> false

我知道哈希集可能会有所帮助,但我不知道如何用Java编写。

这是我尝试过的,但是没有用:
public static boolean allElementsTheSame(List<String> templist)
{

    boolean flag = true;
    String first = templist.get(0);

    for (int i = 1; i< templist.size() && flag; i++)
    {
        if(templist.get(i) != first) flag = false;
    }

    return true;
}

最佳答案

使用Stream API(Java 8+)

boolean allEqual = list.stream().distinct().limit(2).count() <= 1

要么
boolean allEqual = list.isEmpty() || list.stream().allMatch(list.get(0)::equals);

使用Set:
boolean allEqual = new HashSet<String>(tempList).size() <= 1;

使用循环:
boolean allEqual = true;
for (String s : list) {
    if(!s.equals(list.get(0)))
        allEqual = false;
}

OP的代码存在问题

您的代码有两个问题:
  • 由于要比较String,因此应使用!templist.get(i).equals(first)而不是!=
  • 您有return true;,但应该是return flag;

  • 除此之外,您的算法是可靠的,但是您可以通过执行以下操作来摆脱flag的困扰:
    String first = templist.get(0);
    for (int i = 1; i < templist.size(); i++) {
        if(!templist.get(i).equals(first))
            return false;
    }
    return true;
    

    甚至
    String first = templist.get(0);
    for (String s : templist) {
        if(!s.equals(first))
            return false;
    }
    return true;
    

    08-03 12:25