1

唯一想到的答案是递归或以某种方式将列表转换为字符串,但给出了字符串列表,例如

List<String> items = Arrays.asList("a,b,a,c,d,e,a".split("\\s*,\\s*"));

在不使用迭代的情况下,您如何在任何类型的 List 中找到特定值的出现次数(我认为您可以忽略库方法的工作方式),例如,在上面的“a”中,值为 3。

是的,这是一个面试问题:)

4

3 回答 3

6

如何在不遍历集合的情况下检查每个元素?为了避免显式编码迭代可以使用Collections.frequency()which:

返回指定集合中等于指定对象的元素数。更正式地说,返回集合中元素 e 的数量,使得 (o == null ? e == null : o.equals(e))。

于 2013-06-04T14:00:28.183 回答
2

这将是一个递归解决方案,因为总是容易发生堆栈溢出,并且在 Java 中并不是一个很好的选择。但是由于面试官喜欢递归,所以就这样吧:)

int countOccurences(List<T> l, T x) {
  return l.isEmpty()? 0 
   : (l.get(0).equals(x)? 1 : 0) + countOccurrences(l.subList(1, l.length()), x);
}
于 2013-06-04T14:13:19.967 回答
1

一种方法是:

int countInCollection(List<T> list, T toFind) {
  int count = 0;
  while (list.remove(toFind)) {
    count++;
  }
  return count;
} 
于 2013-06-04T14:03:26.667 回答