需求:
从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); }
分析:
考虑到性能问题,会考虑方案二,复杂度低,而且容易看懂。