//使用HashSet实现数组打乱功能
int size=40;
int[] num=new int[size];//条件数组
LinkedList linkedList=new LinkedList();//使用链表存储数组,因为主要使用链表的contains方法
while (linkedList.size()!=size){//终止条件是链表中包含40个元素之时
int x=(int)(Math.random()*size)%size;//随机在size里生成数据,确保随机性
if(!linkedList.contains(x))//如果链表中不包含数据则加入链表
linkedList.add(x);
}
Iterator it=linkedList.iterator();
System.out.println("SIZE:"+linkedList.size());
while (it.hasNext()){
System.out.print(it.next()+">");
}
后来发现Arrays有个aslist方法,可以简化一下代码
//使用HashSet实现数组打乱功能
int size=40;
int flag=0;//不适用linkedlist之后,自己定义一个中止条件
Integer[] num=new Integer[size];//条件数组(这里有个坑。就是必须设置成Integer否则将无法正确的执行contains)
while (flag!=40) {//终止条件是flag为40个元素之时
int x = (int) (Math.random() * size) % size;//随机在size里生成数据,确保随机性
if (!Arrays.asList(num).contains(x)) {//如果链表中不包含数据则加入链表
num[flag] = x;
flag++;
}
}
System.out.println("SIZE:"+flag+"\n"+Arrays.toString(num));
但是!
这里有个大坑-是必须设置成Integer否则将无法正确的执行contains。。。
具体参考这个答案:https://www.jianshu.com/p/2b113f487e5e