import java.util.HashMap;
import java.util.Random;
import java.util.Scanner;
public class UniqueAndRandom implements Runnable{
static HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
static int times=0;
public static void main(String[] args) {
// TODO 自动生成的方法存根
int hpSum=0;
int maxNumber;
Scanner input=new Scanner(System.in);
System.out.println("输入最大的整数: ");
maxNumber=input.nextInt();
initHash(maxNumber);
for(int i=0;i<maxNumber;i++)
{
int previousHpSum=hpSum;
UniqueAndRandom ur=new UniqueAndRandom();
//ur.run();
int temp=getOnce(maxNumber);
hpSum+=temp;
System.out.println(temp+"\t"+temp+"+"+previousHpSum+"="+hpSum+"\t"+times);
}
System.out.println(hpSum+"--结果:--"+ test(maxNumber));
}
private static synchronized int getOnce(int maxNum)
{
Random rd=new Random();
int temp=rd.nextInt(maxNum+1);
if(temp==0)
{
temp++;
}
if(map.get(temp)==-1)
{
return getOnce(maxNum);
}
else
{
times++;
int t2= map.get(temp);
map.put(temp, -1);
return t2;
}
}
public static void initHash(int maxNum)
{
for(int i=1;i<=maxNum;i++)
{
map.put(i, i);
}
}
private static int test(int maxNum)
{
int sum=0;
for(int i=1;i<=maxNum;i++)
{
sum=sum+i;
}
return sum;
}
@Override
public void run() {
// TODO 自动生成的方法存根
getOnce(19999);
}
}
最近同学做一个项目,遇到一个问题。要从1-N中抽N个数,而且N个数个个不同,刚开始我觉得蛮简单的,下面我将自己的代码贴上,希望有人能够不用递归做出来一样的效果,并做到N比如大到10W 不会出现内存溢出的问题。