一个ArrayList里按升序储存一些数字  比如 3,3,3,4,4,4,5,5,5,6,7,8 可以重复的数字最多为4个
然后分别放到另外4个ArrayList里
规则:
如果要放入的这个数和这个ArrayList最后一个相等 就放入下一个ArrayList中 以此类推
比如以上排序后应该为:
[3, 4, 5, 6, 7, 8]
[3, 4, 5]
[3, 5]
[3]3,3,3,3,4,4,5,5,5,6,7
应该为:
[3, 4, 5, 6, 7, 8]
[3, 4, 5]
[3, 5]
[3]
我自己写了个算法感觉特笨- -
希望大家教教我怎么写出更好效率更高的
谢谢    private static void DiffRow(ArrayList nums)
    {
        ArrayList _aa = new ArrayList();
        ArrayList _bb = new ArrayList();
        ArrayList _cc = new ArrayList();
        ArrayList _dd = new ArrayList();
        int test = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            test = Integer.parseInt(nums.get(i).toString());            if (_aa.size() == 0)
            {
                _aa.add(nums.get(i));
            }
            else
            {
                if (test != Integer.parseInt(_aa.get(_aa.size() - 1).toString()))
                {
                    _aa.add(nums.get(i));
                }
                else if (_bb.size() == 0)
                {
                    _bb.add(nums.get(i));
                }
                else
                {
                    if (test != Integer.parseInt(_bb.get(_bb.size() - 1).toString()))
                    {
                        _bb.add(nums.get(i));
                    }
                    else if (_cc.size() == 0)
                    {
                        _cc.add(nums.get(i));
                    }
                    else
                    {
                        if (test != Integer.parseInt(_cc.get(_cc.size() - 1).toString()))
                        {
                            _cc.add(nums.get(i));
                        }
                        else
                        {
                            _dd.add(nums.get(i));
                        }
                    }
                }
            }        }
        System.out.println(_aa);
        System.out.println(_bb);
        System.out.println(_cc);
        System.out.println(_dd);
    }

解决方案 »

  1.   

    是不是 可以理解为 每一个ArrayList不放重复数字
       那用HashSet判断 能放入 则加入ArrayList
    效率不见得比楼主的好,只是多了一种想法package com.test;import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;public class ArrayListDiffRow {
    static List<Integer> list=new ArrayList<Integer>();
    static List<Integer> list1=new ArrayList<Integer>();
    static List<Integer> list2=new ArrayList<Integer>();
    static List<Integer> list3=new ArrayList<Integer>();
    static List<Integer> list4=new ArrayList<Integer>();
    static Set<Integer> set = new HashSet<Integer>();   

    public static void main(String[] args) {
    list.add(3);
    list.add(3);
    list.add(3);
    list.add(3);
    list.add(4);
    list.add(4);
    list.add(5);
    list.add(5);
    list.add(5);
    list.add(6);
    list.add(7);
    list.add(8);

    list1=diffRow(list);
    list2=diffRow(list);
    list3=diffRow(list);
    list4=diffRow(list);
    for (Integer i : list4) {
    System.out.println(i);
    }
    }
    public static List<Integer> diffRow(List<Integer> list){
     List<Integer> aList=new ArrayList<Integer>();
    for (int i=list.size()-1 ;i>=0;i--) {
                //能放入set 则添加到aList中
    if (set.add(list.get(i))) {//
    aList.add(list.get(i));
                //去掉已添加的元素
    list.remove(i);
    }
    }
    set.clear();//清空set
    return aList;
    }
    }
      

  2.   

    无泛型版
    import java.util.ArrayList;public class Test{ 
      public static void main(String[] args){ 
       ArrayList a=new ArrayList();
       int[] num={3,3,3,3,4,4,5,5,5,6,7};
       for(int i=0;i<num.length;i++){
       a.add(num[i]);
       }
       ArrayList[] as=new ArrayList[4];
       for(int i=0;i<as.length;i++){
       as[i]=new ArrayList();
       }
      
       ///////以下可作为独立方法
       for(int i=0,temp=num[0],count=0;i<a.size();i++,count++){
       if(temp==(Integer)a.get(i))
       as[count].add(a.get(i));
       else{
       temp=(Integer)a.get(i);
       count=-1;
       i--;
       }
       }
       ////////
      
       for(int i=0;i<as.length;i++){
       System.out.println(as[i]);
       }
           } 
    }