如何检查列表中的元素是否相同?

时间:2012-08-27 18:46:59

标签: java list set

Java中是否有更简洁的方法来确认List中的所有元素是否相同?

boolean elementsAreIdentical() {
  return new HashSet<O>(list).size() == 1;
}

通过'清洁',我想知道我们是否可以这样做而无需创建一个全新的对象?根据大小,开销可能很大。

3 个答案:

答案 0 :(得分:6)

if (Collections.frequency(list, list.get(0)) == list.size()) {
  /* duplicates */
}

...表示非空的列表。否则,

final int n = list.size();
if (n == 0 || Collections.frequency(list, list.get(0)) == n) {
  /* duplicates */
}

请参阅Collections.frequency的规范。这将比您的方法和其他方法更便宜,例如Collections.nCopies(list.get(0), list.size()).equals(list)

答案 1 :(得分:0)

实现结果是一种非常昂贵的方法 - 在大型数据结构的情况下,您在内存占用和CPU周期方面都会面临巨大的开销。我的第一个建议是在创建列表时控制它。

答案 2 :(得分:0)

它有点冗长,但它分别具有O(n)O(1)时间和空间复杂度,但是一旦找到第一个不相同的元素它就会停止:

public static <T> boolean elementsAreIdentical(List<T> l) {
    if (!l.isEmpty()) {
        Iterator<T> it = l.iterator();
        T unique = it.next();
        while (it.hasNext()) {
            if (!it.next().equals(unique)) {
                return false;
            }
        }
    }
    return true;
}