java记录一维数组中多个相同值出现的位置下标

Posted zwk2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 - 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));
    }
}
}

代码中有注释,大家基本都是可以读懂。

以上是关于java记录一维数组中多个相同值出现的位置下标的主要内容,如果未能解决你的问题,请参考以下文章

Java定义一个一维数组,并给每个元素赋值为数组下标的值,并显示

JAVA编程中,如何求2维数组中最大的K个值,并且记录K个值的位置?

PHP 把二维数组按下标拆分成一维数组

如何用matlab筛选一个数组中大于某值的数

数组

一维数组的定义与引用(初学者)