首页 文章

在不使用HashMap的情况下查找已排序ArrayList中最频繁的String

提问于
浏览
2

考虑 ArrayListString 含有

animalsArray[dog, cat, dog, dog, cat, duck, duck, dog]

我可以轻松地使用 HashMap 来查找最常见的 String ,使用 HashMap 值作为计数器,以及存储动物名称的键 .

如果 ArrayList 已排序

[dog, dog, dog, dog, cat, cat, duck, duck]

在不使用 Hashmaps 的情况下找到最常见元素的最简单方法是什么?我正在考虑使用for循环比较 animalArray.get(i)animalArray.get(i-1) ,但我无法开发此解决方案 . 如果有的话,有什么优势,当我们需要时,我们需要找到最常见的元素排序 ArrayList

1 回答

  • 4

    在不使用Hashmaps的情况下找到最常见元素的最简单方法是什么?

    我认为(Java 8)这很容易:

    String str = list.stream()
                     .distinct()
                     .max(Comparator.comparing(e -> Collections.frequency(list, e)))
                     .get();
    

    这将创建 StreamStream ,并在 List 中找到频率最高的元素 .

    当我们需要找到最常见的元素时,有什么优势,如果有的话,有一个排序的ArrayList?

    想象一下未分类 List

    [dog, cat, turtle, cat, dog, snake]
    

    对于每个元素,您将必须搜索 List 的其余部分以查看它出现的次数 .

    但是排序 List

    [dog, dog, cat, cat, snake, turtle]
    

    您只需要一个计数器来跟踪包含相同元素的最长子列表 . 然后变成类似(伪代码)的东西:

    //T being the type of the List
    T element
    int count = 0;
    int biggestCount = 0;
    for(every element in the list) {
       if the item is the same as previous
          count++
       else 
          //Only check when we're about to change elements
          if count > biggestCount
              biggestCount = count
              element = current element of List
          //Starting over with a new element
          count = 1
    }
    return element
    

相关问题