import java.util.HashMap;import java.util.Map;public class Main { public static int countDuplicates(int[] arr) { Map<Integer, Integer> countMap = new HashMap<>(); int duplicates = 0; // 统计每个元素出现的次数 for (int i = 0; i < arr.length; i++) { int key = arr[i]; int count = countMap.getOrDefault(key, 0); countMap.put(key, count + 1); } // 统计重复元素的个数 for (int count : countMap.values()) { if (count > 1) { duplicates++; } } return duplicates; } public static void main(String[] args) { int[] arr = {1, 2, 3, 2, 4, 3, 5, 4, 6}; int duplicates = countDuplicates(arr); System.out.println(duplicates); // 输出:3 }}
时间: 2023-04-05 17:00:24 浏览: 112
这是一个关于 Java 编程的问题,主要是统计数组中重复元素的个数。根据给出的代码,使用 HashMap 统计每个元素出现的次数,然后再遍历 HashMap 统计重复元素的个数。最后输出重复元素的个数。对于给出的数组,输出结果为 3。
相关问题
java把数组转map
Java可以通过将数组转换为Map来快速提高代码的效率和可读性。在Java中,Map是一种键值对集合,可以通过一个键来访问对应的值。数组就是一组有序元素的集合,可以通过索引来访问每一个元素。因此,将数组转换为Map就可以将数组的元素作为键,而数组元素的索引作为值,这样就可以快速地通过一个键来获取对应的值。
在Java中,可以使用Map.Entry来实现数组转换为Map的功能。具体实现过程如下:
1.声明一个Map变量用来存储转换后的键值对集合。
2.使用for循环遍历数组中的元素,把每个元素转换为一个键值对,然后存入Map中。
3.在循环结束之后,就可以通过给定的键来获取对应的值。
下面是一个示例代码,在该代码中,我们使用了数组intArr来演示如何将数组转换为Map。
```
import java.util.HashMap;
import java.util.Map;
public class ArrayToMap {
public static void main(String[] args) {
int[] intArr = {1, 4, 9, 16, 25};
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < intArr.length; i++) {
map.put(i, intArr[i]);
}
System.out.println(map);
System.out.println(map.get(2));
}
}
```
运行结果如下:
{0=1, 1=4, 2=9, 3=16, 4=25} 9
从运行结果中可以看到,该程序将数组intArr转换为了Map类型的键值对集合。对于索引为2的元素,可以通过map.get(2)来获取对应的值。
import java.util.*; class Answer { public String rankGroup(String[] args){ int len = args[0].length(); int[][] arr = new int[26][len]; char[][] ch = new char[args.length][len]; for (int i=0; i < ch.length; i++){ ch[i] = args[i].toCharArray(); } for (int j = 0; j<len; j++){ for (int i = 0; i < ch.length; i++){ char c = ch[i][j]; arr[c - 'A'][j] += 1; } } Map<int[], Character> map = new HashMap(); int[] nullArr = new int[len]; for (int i=0; i<arr.length; i++){ if (!Arrays.equals(arr[i], nullArr)){ map.put(arr[i], (char) (i + 65)); } } Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] a, int[] b) { int len = a.length; int index = 0; while (index < len - 1){ if (a[index] == b[index]){ index += 1; }else { break; } } return b[index] - a[index]; } }); String res = ""; for (int i = 0; i < arr.length; i++){ if (map.get(arr[i]) !=null){ res += map.get(arr[i]); } } return res; } }
这段代码是Java语言编写的,实现了一个名为 `Answer` 的类,其中包含一个方法 `rankGroup`,该方法接收一个字符串数组 `args` 作为参数,返回一个字符串类型的结果。
具体实现的功能是:将字符串数组中的每个字符串按照每个字符在每个字符串中出现的次数进行统计,并按照出现次数的大小进行排名,将排名第一的字符作为结果返回。
具体实现过程如下:
- 首先获取字符串数组中第一个字符串的长度,然后创建一个二维数组 `arr`,用于存储每个字符在每个字符串中出现的次数。同时,创建一个字符类型的二维数组 `ch`,用于存储字符串数组中的每个字符串。
- 遍历字符类型二维数组 `ch`,将每个字符串转化为字符数组,存储到 `ch` 中。
- 遍历二维数组 `arr`,统计每个字符在每个字符串中出现的次数,存储到 `arr` 中。
- 创建一个 `Map` 对象 `map`,用于存储每个字符在二维数组 `arr` 中对应的出现次数。同时,创建一个长度为 `len` 的整型数组 `nullArr`,用于判断某个字符在所有字符串中是否出现。
- 遍历二维数组 `arr`,将出现次数不为零的字符和它在二维数组 `arr` 中对应的出现次数存储到 `map` 中。
- 使用 `Arrays.sort` 方法对二维数组 `arr` 进行排序,排序方式为按照每个字符在所有字符串中出现的次数从大到小进行排序。
- 遍历排序后的二维数组 `arr`,从 `map` 中获取对应的字符,将这些字符按照顺序拼接成一个字符串,并返回该字符串作为方法 `rankGroup` 的结果。
需要注意的是,该方法中使用了一些 Java 中的内置类和方法,如 `Arrays` 类、`Map` 接口、`Comparator` 接口等。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)