如何使用java在数组中找到相似元素的位置

时间:2014-03-21 11:56:46

标签: java arrays

假设我有一个数组:

input[] = {1,2,3,2,2,3,1,3,2}

我想找到这个数组中每个不同元素的所有位置,并将它们存储在新数组中。输出应如下:

output_1[] = {0,6} //Position of "1" in input array
output_2[] = {1,3,4,8} //Position of "2" in input array
output_3[] = {2,5,7} //Position of "3" in input array

该代码应适用于任何大小和任意数量的不同元素的数组。

2 个答案:

答案 0 :(得分:2)

下面的代码将填充Map<Integer, List<Integer>>,其中包含输入数组中找到的任何不同值的位置。由于Map不能包含重复键,因此存储类似元素的所有位置非常有用。您可以看到我检查Map是否已包含给定值的密钥,如果是,我将其位置添加到现有List。如果没有,我会创建一个新的List,其值为&#39; s位置为初始值。

import java.util.*;

public class Sandbox {
    private Map<Integer, List<Integer>> positions;
    private int[] input;

    public static void main(String[] args) {
        (new Sandbox()).run();
    }

    public Sandbox() {
        positions = new HashMap<Integer, List<Integer>>();
        input = new int[] { 1,2,3,2,2,3,1,3,2 };
    }

    private void run() {
        for(int i = 0; i < input.length; i++) {
            Integer value = input[i];

            if(positions.containsKey(value)) {
                List<Integer> list = positions.get(value);
                list.add(i);
            } else {
                List<Integer> list = new ArrayList<Integer>();
                list.add(i);
                positions.put(value, list);
            }
        }

        for(Integer key : positions.keySet()) {
            System.out.println("Value: " + key);
            System.out.println("----------");
            for(Integer position : positions.get(key)) {
                System.out.println("Position: " + position);
            }
            System.out.println();
        }
    }
}

这将打印:

Value: 1
----------
Position: 0
Position: 6

Value: 2
----------
Position: 1
Position: 3
Position: 4
Position: 8

Value: 3
----------
Position: 2
Position: 5
Position: 7

答案 1 :(得分:0)

package com.loknath.lab;

import java.util.HashSet;
import java.util.Set;

public class Test {

public static void main(String[] args) {

    int input[] = { 1, 2, 3, 2, 2, 3, 1, 3, 2 };
    Set<Integer> set = new HashSet<Integer>();
    for (Integer integer : input) {
        set.add(integer);
    }

    for (Integer integer : set) {
        findIndexes(integer, input);
    }

}

public static void findIndexes(Integer integer, int[] input) {
    System.out.print("output_" + integer + "[]=   {");
    for (int i = 0; i < input.length; i++) {
        if (input[i] == integer) {
            System.out.print(i + ",");
        }
    }
    System.out.print("}");
    System.out.println();
}

  }

输出:_

 output_1[]=   {0,6,}
 output_2[]=   {1,3,4,8,} 
 output_3[]=   {2,5,7,}