从list中随机选出几个数,并按照原来的顺序排列

需求:

从list中随机选出几个数,并按照原来的顺序排列(比如从list中随机选出6个数)

方案一:

//若对象size大于6,则随机去除6个对象,并按照原来的顺序排列
while(list.size() > 6) {
                //随机取一个对象
             Long target = list.get(randomId.nextInt(list.size()));
             for(ListObject object : list) {
                     if(object.getId() == target) {
                                //将取出的那个对象删除
                         list.remove(object);
                         break;
                     }
                 }        
}

方案二:

        //若list.size()大于6套,随机产生6个对象,并按照原来的顺序排列
        //若list的对象为ListObject
        if(list.size() > 6) {
            Random randomId = new Random();
            //对随机的6个对象排成原来的默认顺序
            List<Integer> indexes = new ArrayList<Integer>();
            while(indexes.size() < 6) {
                //对象在list里的位置
                int index = randomId.nextInt(list.size());
                if(!indexes.contains(index)) {
                    indexes.add(index);
                }
            }
            //对indexes排序
            Collections.sort(indexes);
            //取出indexes对应的list放到newList
            List<ListObject> newList = new ArrayList<ListObject>();
            for(int index : indexes) {
                newList.add(list.get(index));
            }
            list.clear();
            list.addAll(newList);
        }

分析:

考虑到性能问题,会考虑方案二,复杂度低,而且容易看懂。

 

posted @ 2016-08-09 10:40  姜小妖  阅读(3828)  评论(0编辑  收藏  举报