java記錄一維數組中多個相同值出現的位置下標


問題描述:

  我需要在一個整數型一維數組中,找出相同數字出現的位置下標並記錄。

例如:

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));
    }
}
}

代碼中有注釋,大家基本都是可以讀懂。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM