Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在排序的ArrayList中查找最频繁的字符串而不使用HashMap_Java_Arrays_Sorting_Arraylist_Counter - Fatal编程技术网

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
只允许在循环中进行一次迭代,因此它具有更好的时间复杂度,假设
列表
未排序。