问题描述:
我需要在一个整数型一维数组中,找出相同数字出现的位置下标并记录。
例如:
int[] test={3,3,1,1,2,5,1}
最终需要得到的是(数字-->出现的位置下标):
3 -->[0,1] 1 -->[2,3,6] 2 -->[4] 5 -->[5]
接下来通过代码实现我想要的功能,如下:
package Test; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; public class Test { //java获取数组中多个相同值的位置 public static void main(String args[]) { /** * 使用linkedhashmap 效果最好 * 存储数字,还要存储该数字出现在数组中的下标位置 * 使用Integer记录数字 * 使用ArrayList<Integer>存储该数字出现在数组中的下标位置(这样做的目的是不需要像int数组那样去定义它的初始长度) * key->value,可以直接获取到数字->所在下标位置 * @author zwk */ Map<Integer,ArrayList<Integer>> saveMap=new LinkedHashMap<Integer,ArrayList<Integer>>(); int[] test = {3,3,1,1,2,5,1}; for (int i = 0; i < test.length - 1; i++) { if(test[i] != -1)//设置一个数组中不可能出现的值 { //记录该数字 int id=test[i]; //创建list,用于存放数字所在的下标位置 ArrayList<Integer> list=new ArrayList<Integer>(); list.add(i); //记录该数字出现的第一个位置 for (int j = i + 1; j < test.length; j++) { //遍历数组,查找与test[i]相同的值并记录下标 if(test[i] == test[j]) { list.add(j); test[j] = -1;//同上,设置一个不可能出现的值,要与前面设置的保持一致 } } //通过key-value将该数字和出现的位置put进map saveMap.put(id, list); } } //获取saveMap中的key值,即出现的数字个数 Set<Integer> idSet=saveMap.keySet(); for(int id:idSet) { //通过key获取其value System.out.println(id+" -->"+saveMap.get(id).size()); System.out.println(id+" -->"+saveMap.get(id)); } } }
代码中有注释,大家基本都是可以读懂。
原文地址:https://www.cnblogs.com/zwk2018/p/9685963.html
时间: 2024-11-05 21:52:05