我们可以把数组的长度设置成100,检验下运行效果,如下图所示:

  以上几种相比较而言,使用HashMap的效率是比较高的,其实是HashSet,再次是数组,后是ArrayList。如果我们生成10000个数据将会发现,使用HashMap花费时间是:0.05s,HashSet是0.07s,数组是:0.20s,而ArrayList是0.25s。有兴趣的可以设置下时间查看一下。

  当然了,除了使用HashMap实现外,还有其它高效的方法。比如,我们可以把1-100这些数字存储在一个数组中,然后在for循环中随机产生两个下标,如果这两个下标不相等的话,可以交换数组中的元素,实现过程如下所示:

import java.util.Random;

/**
 * 随机调换位置实现
 * @Description:

 * @File: Demo4.java

 * @Package None

 * @Author Hanyonglu

 * @Date 2012-10-18 下午06:54:06

 * @Version V1.0
 */
public class Demo4 {
    public static void main(String[] args) {
        int values[] = new int[100]; 
        int temp1,temp2,temp3; 
        Random r = new Random(); 
      
        for(int i = 0;i < values.length;i++){
            values[i] = i + 1;
        }
      
        //随机交换values.length次 
        for(int i = 0;i < values.length;i++){ 
            temp1 = Math.abs(r.nextInt()) % (values.length-1); //随机产生一个位置 
            temp2 = Math.abs(r.nextInt()) % (values.length-1); //随机产生另一个位置 
          
            if(temp1 != temp2){
                temp3 = values[temp1]; 
                values[temp1] = values[temp2]; 
                values[temp2] = temp3;
            }
        } 
      
        // 遍历数组并打印数据
        for(int i = 0;i < 20;i++){
            System.out.print(values[i] + " ");
          
            if(( i + 1 ) % 10 == 0){
                System.out.println(" ");
            }
        }
    }
}

  这种方法也是比较高效的,如果生成10000个数据,那么它所用的时间是0.054s。

  在数组中利用坐标来实现的基础上可以变换更多相关的解决方法,具体地可以查阅相关资料。

  以上是关于在JAVA中实现随机无重复数字的功能,当然方法也不于这么几种,还有其它的实现方法。希望能对接触不久的朋友有所帮助,也希望能够起到抛砖引玉的作用。