Java 在排序的ArrayList中查找最频繁的字符串而不使用HashMap
考虑到Java 在排序的ArrayList中查找最频繁的字符串而不使用HashMap,java,arrays,sorting,arraylist,counter,Java,Arrays,Sorting,Arraylist,Counter,考虑到字符串的数组列表包含 animalsArray[dog, cat, dog, dog, cat, duck, duck, dog] 我可以很容易地使用HashMap查找最常见的字符串,使用HashMap值作为计数器,并使用键存储动物名称 如果排序了ArrayList [dog, dog, dog, dog, cat, cat, duck, duck] 不使用Hashmaps查找最常见元素的最简单方法是什么?我曾考虑使用for循环将animalArray.get(I)与animalArr
字符串
的数组列表
包含
animalsArray[dog, cat, dog, dog, cat, duck, duck, dog]
我可以很容易地使用HashMap
查找最常见的字符串
,使用HashMap
值作为计数器,并使用键存储动物名称
如果排序了ArrayList
[dog, dog, dog, dog, cat, cat, duck, duck]
不使用Hashmaps查找最常见元素的最简单方法是什么?我曾考虑使用for循环将animalArray.get(I)
与animalArray.get(I-1)
进行比较,但我无法开发此解决方案。当我们需要查找最常见的元素时,使用排序的ArrayList
有什么好处(如果有的话)
不使用Hashmaps查找最常见元素的最简单方法是什么
我会考虑(java 8 +)这是相当容易的:
String str = list.stream()
.distinct()
.max(Comparator.comparing(e -> Collections.frequency(list, e)))
.get();
它将创建列表的流
,并在列表中查找频率最高的元素
当我们需要查找最常见的元素时,使用排序的ArrayList有什么好处(如果有的话)
想象一个未排序的列表
:
[dog, cat, turtle, cat, dog, snake]
[dog, dog, cat, cat, snake, turtle]
对于每个元素,您必须搜索列表的其余部分
,以查看它出现的次数
但是,对于排序的列表
:
[dog, cat, turtle, cat, dog, snake]
[dog, dog, cat, cat, snake, turtle]
您只需要有一个计数器来跟踪包含相同元素的最长子列表。然后它会变成(伪代码):
非常感谢您的解决方案!如果我把你的循环弄对了,在循环的最后,你会返回最大的数字,这很神奇,但不是与之相关的动物的名字。另外,如果我错了,请告诉我,使用hashmaps进行计数将导致时间复杂度O(n),而使用Collection.sort进行排序是O(n logn)+for循环以查找最高值,该值应为O(n),因此最后是O(n logn)+O(n)?@jaymartines是的,我展示的循环只是为了说明在排序的元素中找到最大的元素要比在未排序的元素中找到最大的元素容易得多。是的,使用HashMap
只允许在循环中进行一次迭代,因此它具有更好的时间复杂度,假设列表
未排序。