今天在做项目时,需要对一些数字进行统计,
如现在有10个数
Integer[] is={1,2,1,3,2,1,3,2,3,4};
如何确定这个数据中有几个值,每个值出现的次数

解决方案 »

  1.   


    public class Test
    {
        public static void main(String[] args)
        {
    Integer[] is={1,2,1,3,2,1,3,2,3,4};

    int[] sta = new int[is.length];

    for(int i = 0; i < is.length; i++)
    {
    sta[is[i]]++;
    }

    for(int i = 0; i < sta.length; i++)
    {
    if(sta[i] != 0)
    {
    System.out.println("数字 " + i + " 在is中出现的次数为 " + sta[i]);
    }
    }
        }
    }
      

  2.   

    那也要看怎么排序了。如果你数组里的数取值范围不确定,或者你的程序对内存使用要求比较苛刻,那就用nlogn的排序方法,比如快速排序。如果数组里的数据取值范围固定且比较小,那可以用bucket sort,这样就只有线性复杂度。比如你统计的数都在0-10000之间,你可以先创建一个[0, 10000]的计数数组,初值赋0。然后把你的目标数组过一遍,看到几,就把计数数组对应位置上的值加1。最后计数数组里非0的位置就是目标数组里出现的值,对应的数就是出现的次数。
      

  3.   

    public class Test
    {
    public static void main(String[] args)
    {
    Integer[] is =
    { 1, 2, 1, 3, 2, 1, 3, 2, 3, 4 }; int[] sta = new int[is.length];
    int count = 0;

    for (int i = 0; i < is.length; i++)
    {
    sta[is[i]]++;
    } for (int i = 0; i < sta.length; i++)
    {
    if (sta[i] != 0)
    {
    count ++;
    System.out.println("数字 " + i + " 在is中出现的次数为 " + sta[i]);
    }
    }
    System.out.println("数字个数为:" + count);
    }
    }
    //统计个数的话,加个计数器就行了
      

  4.   

    四楼的代码不对,如果is里有个值是100,那sta数组就下标越界了
      

  5.   


    如果is数组中的数大于is.length,那么sta数组就会发生数组下标越界异常ArrayIndexOutOfBoundsException吧!
      

  6.   

    [code=Java]
    import java.util.Arrays;
    public class Test
    {
    public static void main(String[] args)
    {
    Integer[] is =
    { 1, 2, 1, 3, 2, 1, 3, 2, 3, 4 ,100};

    Arrays.sort(is);

    int len = is[is.length - 1] > is.length?is[is.length - 1]:is.length;
    len ++;

    int[] sta = new int[len];
    int count = 0;

    for (int i = 0; i < is.length; i++)
    {
    sta[is[i]]++;
    } for (int i = 0; i < sta.length; i++)
    {
    if (sta[i] != 0)
    {
    count ++;
    System.out.println("数字 " + i + " 在is中出现的次数为 " + sta[i]);
    }
    }
    System.out.println("数字个数为:" + count);

    }
    }
    //呵呵,用空间换时间吧,确实有点问题,改了一下,这个应该没问题了。
    code]
      

  7.   

    用我的方法吧import java.util.*;
    public class Test3
    {
        public static void main(String[] args)
        {
    int num = 1;
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
            Integer[] is = {1,2,1,3,2,1,3,2,3,4};
    Arrays.sort(is);
    for(int i = 0;i<is.length; i++){
    if(i !=(is.length-1)){
    if(is[i]==is[i+1]){
    num++;
    }
    if(is[i]!=is[i+1]){
    map.put(is[i],num);
    num = 1;
    }
    }
    else{
    if(is[i]==is[i-1]){
    map.put(is[i],num);
    }
    else{
    map.put(is[i],1);
    }
    }
    }

    System.out.println(map.toString());
        }
    }
      

  8.   

    不错哦,如果能把它设计为一个方法,方法参数为所要求的数组,返类型为hashmap,更好一些把,可移植性也高点
      

  9.   

    public static void main(String[] args) throws UnsupportedEncodingException {
    //需求,一共10个数,现在需要确定里面一共有几个数,每个数出现了几次
    //Integer[] ints={1,6,6,7,7,1,1,6,7,6};
    List<Integer> list=new LinkedList<Integer>();
    list.add(1);
    list.add(6);
    list.add(6);
    list.add(7);
    list.add(7);
    list.add(1);
    list.add(1);
    list.add(6);
    list.add(7);
    list.add(6);
    System.out.println(list);
    //去除重复的数据
    Set<Integer> set=new HashSet<Integer>(list);
    System.out.println(set);
    for (Integer integer : set) {
    int tempNum=0;  
    for (int i = 0; i < list.size(); i++) {
    if(integer==list.get(i)){
    list.remove(i);  //去除数据
    i--;    //
    tempNum++;
    }
    }
    System.out.println(integer+"的数量是:"+tempNum);
    }
    }我当时想到的能处理的方式。本来应该是程序里取出来的数据放到list里的。
    我标题却写成了数组,是在不好意思,
    看我上面的代码,list中里面存放的数是不确定的,
    在里层for循环是,我remove掉这个值,就是为了能减少再次循环的次数。
    List<Integer> list=new LinkedList<Integer>();
    List<Integer> list=new ArrayListList<Integer>();
    如果用remove的方法话。我不知道上面需要定义LinkedList还是 ArrayListList比较好。
    各位给看一下我的这个代码处理是否有所不脱。有没有能改进的地方。毕竟如果消耗资源太大就不好了。
      

  10.   

    public class Test
    {
    public static void main(String[] args)
    {
    Integer[] is={1,2,1,3,2,1,3,2,3,4};int[] sta = new int[is.length];for(int i = 0; i < i……
    这种算法第一次见,顶.......