使用List计算int数组的出现次数

时间:2017-03-08 23:47:07

标签: java arrays arraylist

所以我试图制作一个计算数组中int出现次数的程序。我试图做的是创建一个列出唯一整数的方法,然后另一种方法将列表项与原始数组项进行比较。

public List listUnique(int[] arr){
    Arrays.sort(arr);
    List <Integer> temp = new ArrayList<>();
    int currentInt = 0;
    for (int i = 0; i < arr.length; i++){
        if(arr[i] != currentInt){
            temp.add(arr[i]);
            currentInt = arr[i];
        }
    }
    return temp;
}
public int[] countDupli(List unique, int[] arr){
    int [] ret = new int[unique.size()];
    Iterator <Integer> iterator = unique.iterator();
    for (int l = 0; l < unique.size(); l++){
        ret[l] = iterator.next().intValue(); 
    }   
    int[] dupli = new int[ret.length];
    for (int j = 0; j < ret.length; j++){
        dupli[j] = 0;
    }
    for (int k = 0; k < ret.length; k++){
        for (int i = 0; i < arr.length; i++){
            if ( ret[k] == arr[i]){
                dupli[k]+= 1;
            }
        }
        k++;
    }
return dupli;
}

它没有做那些打算做的事情。例如,输入{1,2,...,1,2} 10个项目,打印正确的唯一项目,但只输出计数1而不是2. dupli = [5,0]。算法在哪里出错了?感谢

1 个答案:

答案 0 :(得分:0)

在您的代码中尝试调试或只打印ret []值并查看是否存在所有唯一值。

其他建议:

List <Integer> temp = new ArrayList<>();
        int currentInt = 0;
        for (int i = 0; i < arr.length; i++){
            if(arr[i] != currentInt){
                temp.add(arr[i]);
                currentInt = arr[i];
            }

您可以简单地使用HashSet,然后您不必编写上面的代码来查找唯一值。 HashSet不存储重复值。

 Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr));

然后你可以使用迭代器并与你的排序数组进行比较并同时增加计数。

您可以跳过以下for循环,因为java默认将其初始化为0

    int[] dupli = new int[ret.length];
    for (int j = 0; j < ret.length; j++){
        dupli[j] = 0;
    }