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