List datas = new ArrayList<>();
datas.add("鼠");
datas.add("牛");
datas.add("虎");
datas.add("兔");
datas.add("龙");
datas.add("蛇");
datas.add("马");
datas.add("羊");
datas.add("猴");
datas.add("猪");
datas.add("狗");
datas.add("鸡");
取出来的值要求是这样的比如:鸡,狗,羊
public static void main(String[] args) {
//1.打印动物个数
int count = 3;
//2.初始化集合
List<String> datas = new ArrayList<String>();
datas.add("鼠");
datas.add("牛");
datas.add("虎");
datas.add("兔");
datas.add("龙");
datas.add("蛇");
datas.add("马");
datas.add("羊");
datas.add("猴");
datas.add("猪");
datas.add("狗");
datas.add("鸡");
//3.定义结果变量
StringBuilder res = new StringBuilder();
//4.获取随机索引
Set<Integer> set = new HashSet<Integer>();
for (int i=0;i<count;i++){
int index = (int) (Math.random() * datas.size());
int size = set.size();
set.add(index);
if(set.size() == size) {//判断重复
i--;
continue;
}
res.append(datas.get(index)).append(",");
}
//5.去除默认逗号
if(',' == res.charAt(res.length()-1))
res = res.deleteCharAt(res.length()-1);
System.out.println(res);
}
结果:鼠,牛,猪
建立一个索引数组,然后从索引数组中随机取出一个来指向datas中的一个元素,同时删除索引数组中的某个索引,这样下一次随机取出索引时就不会取出与上次相同的索引
先取出arraylist的Count,然后随机函数 Random(0,Count) 取出随即出来的索引
arraylist[取出的索引] 就是随机出来的值。至于重复问题基本思路是取得list的指定数目的不重复的index,并取得list中这些index的值组成新的list即可。为了确保index不重复,可以map,利用map.containsKey()方法来判断下标是否存在。为了得到指定的数目使用可以用循环实现。
public static void main(String[] args) {
// TODO Auto-generated method stub
//从list中随机抽取n个不同的元素
List datas = new ArrayList();
List listNew = new ArrayList();
datas.add("鼠");
datas.add("牛");
datas.add("虎");
datas.add("兔");
datas.add("龙");
datas.add("蛇");
datas.add("马");
datas.add("羊");
datas.add("猴");
datas.add("猪");
datas.add("狗");
datas.add("鸡");
listNew = createRandomList(list,3);
//从数组中随机抽取元素
int[] arr = {1,2,3,4,5};
int[] arrNew;
arrNew = createRandomArray(arr,3);
}
/**从数组中随机抽取元素
* @return
* @Title: createRandomArray
* @Description: TODO
* @param arr
* @param i
* @return void
* @throws
*/
private static int[] createRandomArray(int[] arr, int n) {
// TODO Auto-generated method stub
Map map = new HashMap();
int[] arrNew = new int[n];
if(arr.length<=n){
return arr;
}else{
int count = 0;//新数组下标计数
while(map.size()<n){
int random = (int) (Math.random() * arr.length);
if (!map.containsKey(random)) {
map.put(random, "");
System.out.println(random+"==========="+arr[random]);
arrNew[count++] = arr[random];
}
}
return arrNew;
}
}
/**从list中随机抽取元素
* @return
* @Title: createRandomList
* @Description: TODO
* @param list
* @param i
* @return void
* @throws
*/
private static List createRandomList(List list, int n) {
// TODO Auto-generated method stub
Map map = new HashMap();
List listNew = new ArrayList();
if(list.size()<=n){
return list;
}else{
while(map.size()<n){
int random = (int) (Math.random() * list.size());
if (!map.containsKey(random)) {
map.put(random, "");
System.out.println(random+"==========="+list.get(random));
listNew.add(list.get(random));
}
}
return listNew;
}
}
}
身边没电脑,这个问题又刚好是我以前看见过的,我就直接把博主的转过来了,具体网址https://blog.csdn.net/u011526599/article/details/51126006
你想深入了解可以去看一看
final int TEST_TIMES = 100;
final int RESULTS_NUM = 3;
for (int n = 0; n < TEST_TIMES; n++) {
System.out.println("--------- 第" + (n + 1) + "次结果 ---------");
List<String> results = new ArrayList<>(RESULTS_NUM);
int num = 0;
while (num < RESULTS_NUM) {
int index = new Random().nextInt(datas.size());
String data = datas.get(index);
if (results.contains(data)) {
continue;
}
results.add(data);
num++;
}
System.out.println(results);
}
public static void main(String[] args) {
//1.初始化集合
List<String> datas = new ArrayList<String>();
datas.add("鼠");
datas.add("牛");
datas.add("虎");
datas.add("兔");
datas.add("龙");
datas.add("蛇");
datas.add("马");
datas.add("羊");
datas.add("猴");
datas.add("猪");
datas.add("狗");
datas.add("鸡");
//2.打印动物个数(随机)
int count = (int) (Math.random() * datas.size());
//3.定义结果变量
StringBuilder res = new StringBuilder();
//4.获取随机索引
Set<Integer> set = new HashSet<Integer>();
for (int i=0;i<count;i++){
int index = (int) (Math.random() * datas.size());
int size = set.size();
set.add(index);
if(set.size() == size) {//判断重复
i--;
continue;
}
res.append(datas.get(index)).append(",");
}
//5.去除默认逗号
if(',' == res.charAt(res.length()-1))
res = res.deleteCharAt(res.length()-1);
System.out.println(res);
}
先取出arraylist的Count,然后随机函数 Random(0,Count) 取出随即出来的索引
arraylist[取出的索引] 就是随机出来的值。至于重复问题基本思路是取得list的指定数目的不重复的index,并取得list中这些index的值组成新的list即可。为了确保index不重复,可以map,利用map.containsKey()方法来判断下标是否存在。为了得到指定的数目使用可以用循环实现。1
重新做个中间数组存好取length以length为max去随机再用一个新数组存不就好了,然后在中间数组那里remove原来的项loop前面的方法