問題描述:
我需要在一個整數型一維數組中,找出相同數字出現的位置下標並記錄。
例如:
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; 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)); } } }
代碼中有注釋,大家基本都是可以讀懂。