Java多维数组和整数出现

时间:2015-09-01 13:39:56

标签: java arrays multidimensional-array

我有一个叫做numList的整数数组,它有

[4, 4, 3, 3, 3, 2, 1, 1, 1, 1, -1, -12, -12, -12, -12]

我想创建一个可存储

的多维数组

enter image description here

左侧表示数字,右侧表示出现次数。

我尝试的尝试......我无处可去。

        // Declaring the new multi-dimensional array.
    int [] [] newArray = new int [6] [2];

    // Counter 3.
    int counter3 = 0;

    // Get first occurrence.    
    while (numList[counter3] < numList.length){



        for (int counter3:numList){
            newArray[] ([counter3]++);


        }

3 个答案:

答案 0 :(得分:0)

    private Map<Integer, Integer> segregateArray(List<Integer> list) {
    Map<Integer, Integer> result = new HashMap<>();
    for (Integer i : list) {
        if (result.containsKey(i)) {
            result.put(i, result.get(i) + 1);
        } else {
            result.put(i, 1);
        }
    }
    return result;
}

这应该有效。如果你仍然需要返回数组,请使用:

private int[][] segregateArray(int[]list) {
    Map<Integer, Integer> resultHelper = new HashMap<>();
    for (int i : list) {
        if (resultHelper.containsKey(i)) {
            resultHelper.put(i, resultHelper.get(i) + 1);
        } else {
            resultHelper.put(i, 1);
        }
    }
    int[][] result = new int[resultHelper.size()][2];
    int arrayIterator=0;
    for(Integer key : resultHelper.keySet())
    {
        result[arrayIterator][0]=key;
        result[arrayIterator][1]=resultHelper.get(key);
        arrayIterator++;
    }
    return result;
}

答案 1 :(得分:0)

在现实生活中,您可能应该避免使用低级数组机制来实现这样的功能(您添加了一个广泛的测试套件,不是吗?:)并选择对于一个可用的库。

在Java 8中,这可以很好地使用闭包,类似于此处描述的内容:Count int occurrences with Java8

在Java 7及更早版本中,我会使用其中一个集合库,例如Guava,它包含一个Multiset集合,可以提供您所追求的内容。

答案 2 :(得分:0)

假设您的数字与示例numList中的数字一致,那么您可以这样做:

int[] numList = { 4, 4, 3, 3, 3, 2, 1, 1, 1, 1, -1, -12, -12, -12, -12 };
int[][] newArray = new int[6][2];
int index = 0;

for (int i = 0; i < numList.length;) {
    int count = 0;
    for (int x = 0; x < numList.length; x++)
        if (numList[x] == numList[i]) count++;
    newArray[index][0] = numList[i];
    newArray[index][1] = count;
    index++;
    i += count;
}
for (int x = 0; x < newArray.length; x++) {
    for (int i = 0; i < newArray[0].length; i++)
        System.out.print(newArray[x][i] + " ");
    System.out.println();
}

通过这种方式,您不必像其他答案那样处理导入(而且这个更短),但这只有在您订购了数字时才有效。不过,有一些很好的排序算法。

编辑:我更改了它,以便它可以以任何大小的任何顺序获取数字。

int[] numList = { 6, 6, 5, 5, 4, 4, 3, 2, 1, 1, 1, 7, 6, 5, 7, 8, 65, 65, 7 };
int[][] newArray = new int[1][2];
int index = 0;
for (int i = 0; i < numList.length;) {
    try {
        int count = 0;
        boolean isUnique = true;
        for (int x = 0; x < i; x++)
            if (numList[x] == numList[i]) {
                isUnique = false;
                break;
            }
        if (isUnique) {
            for (int x = 0; x < numList.length; x++)
                if (numList[x] == numList[i]) count++;
            newArray[index][0] = numList[i];
            newArray[index][1] = count;
            index++;
        }
        i++;
    } catch (ArrayIndexOutOfBoundsException e) {
        int tmpArray[][] = newArray;
        newArray = new int[tmpArray.length + 1][tmpArray[0].length];
        for (int row = 0; row < tmpArray.length; row++)
            for (int col = 0; col < 2; col++)
                newArray[row][col] = tmpArray[row][col];
    }
}
for (int x = 0; x < newArray.length; x++) {
    for (int i = 0; i < newArray[0].length; i++)
        System.out.print(newArray[x][i] + " ");
    System.out.println();
}

因此,在这一点上,使用其他答案中的地图可能会更短。我的第二个答案的唯一好处是不担心进口。