cnsd007 2009-07-17 12:36
浏览 155
已采纳

分离list问题

一个list[1,1,2,2,1,1,1,2,2,2] 怎么分成
多个list [1,1]
[2,2]
[1,1,1]
[2,2,2]

java实现恩
[b]问题补充:[/b]
是的,内容相同就为一个list
[b]问题补充:[/b]
连续的内容相同为一个list

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-07-17 13:19
    关注

    [code="java"]
    public static void main(String[] args)
    {

        List<Integer> ary = new ArrayList<Integer>();
        ary.add(1);ary.add(1);ary.add(1);
        ary.add(2);ary.add(2);ary.add(2);
        ary.add(1);ary.add(1);ary.add(1);ary.add(1);ary.add(1);ary.add(1);
        ary.add(3);ary.add(3);ary.add(3);
    
        List<List<Integer>> ret = splitListLinked(ary);
    
        System.out.println(ret);
    }
    
    public static List<List<Integer>> splitListLinked(List<Integer> ary)
    {
        if(ary == null || ary.size() == 0)
            return null;
    
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        Map<Integer,List<Integer>> map = new HashMap<Integer,List<Integer>>();
        int cur = Integer.MIN_VALUE;
        int before = Integer.MIN_VALUE;
        for(int num : ary)
        {
            cur = num;
            List<Integer> list = map.get(num);
            if(list == null)
            {   
                if(map.get(before) != null)
                {
                    ret.add(map.remove(before));
                }
    
                before = num;
                map.put(num, new ArrayList<Integer>());   
                list = map.get(num);
            }
            else
            {
                if(before != cur)
                {
                    ret.add(map.remove(before));
                }
            }
            list.add(num);
        }
    
    
        ret.addAll(map.values());
    
        return ret;
    
    }
    

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?