Java实现:统计无序ArrayList中重复元素序列出现次数的函数
Java函数:统计元素的重复序列出现次数
我来帮你实现这个需求。核心思路是先遍历原数组,统计每个值对应的连续序列出现次数(单次出现也算一个序列),然后根据这个统计结果生成新列表,全程不会修改原数组内容。
实现步骤
- 统计序列次数:用一个
HashMap记录每个值的序列出现次数。遍历原数组时,只要当前元素和前一个元素不同,就给当前元素的计数加1(首次出现则设为1)。 - 生成结果列表:再次遍历原数组,将每个元素对应的序列次数存入新列表,这样就能保证新列表和原列表尺寸一致,且每个位置对应正确的计数。
完整代码
import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class SequenceCounter { public static ArrayList<Integer> countSequenceOccurrences(ArrayList<Integer> original) { // 处理空输入 if (original == null || original.isEmpty()) { return new ArrayList<>(); } Map<Integer, Integer> sequenceCountMap = new HashMap<>(); Integer previous = original.get(0); // 初始化第一个元素的序列计数 sequenceCountMap.put(previous, 1); // 遍历数组统计序列次数 for (int i = 1; i < original.size(); i++) { Integer current = original.get(i); if (!current.equals(previous)) { // 更新当前元素的序列计数:存在则加1,不存在则设为1 sequenceCountMap.put(current, sequenceCountMap.getOrDefault(current, 0) + 1); previous = current; } } // 生成结果列表 ArrayList<Integer> result = new ArrayList<>(); for (Integer num : original) { result.add(sequenceCountMap.get(num)); } return result; } // 测试示例 public static void main(String[] args) { // 示例1 ArrayList<Integer> arr1 = new ArrayList<>(); arr1.add(3); arr1.add(0); arr1.add(1); arr1.add(2); arr1.add(1); arr1.add(1); arr1.add(1); arr1.add(3); System.out.println(countSequenceOccurrences(arr1)); // 输出 [2,1,2,1,2,2,2,2] // 示例2 ArrayList<Integer> arr2 = new ArrayList<>(); arr2.add(1); arr2.add(0); arr2.add(1); arr2.add(2); arr2.add(1); arr2.add(3); System.out.println(countSequenceOccurrences(arr2)); // 输出 [3,1,3,1,3,1] // 示例3 ArrayList<Integer> arr3 = new ArrayList<>(); arr3.add(1); arr3.add(0); arr3.add(0); arr3.add(2); arr3.add(1); arr3.add(3); arr3.add(0); System.out.println(countSequenceOccurrences(arr3)); // 输出 [2,2,2,1,2,1,2] } }
代码说明
- 原数组保护:全程只读取原数组的元素,没有任何修改操作,确保原数组内容不变。
- 边界处理:考虑了输入为空的情况,直接返回空列表。
- HashMap的使用:
getOrDefault方法简化了计数更新逻辑,避免了判断元素是否存在的冗余代码。 - 效率:两次遍历数组,时间复杂度为O(n),空间复杂度主要由HashMap决定,最坏情况是所有元素都不同,空间复杂度O(n)。
你可以直接把这个函数放到你的项目里,或者根据自己的需求调整细节(比如处理null元素的情况,只需要在比较时加null判断即可)。
内容的提问来源于stack exchange,提问作者Tal
相关产品推荐
相关产品推荐

