可以帮当前的时间取出来
再加上一个随机数
就有不重复的id了out.println((int)(Math.random()*100)+1);
产生1-100的随机数

解决方案 »

  1.   

    取当前时间.
    new Date().getTime().一个长整形,如果嫌太大,就减去一个常量即可.
    加上一个随机数不可以.有可能重复了就!
      

  2.   

    同 leshui(大象无形)(有物混成,先天地生) 的方法当前时间加上1-100的随机数应该能保证是唯一的,因为时间每次都不同嘛不过这个只能在同一个VM里,不同的VM里时间可能就会相同了..
      

  3.   

    哈哈,这个问题很简单的,我曾经写了个游戏就是这样的。
    步骤1,产生Vector ctor = new Vector();
    步骤2,产生数 int tt = Random();
    步骤三,把数放到Vector中。Integer ttt = new Integer(tt);ctor.Add(ttt);
    继续产生:
    while(ctor.Contains(ttt))
    {
       tt = Math.Random();
       ttt = new Integer(tt);
    }
    return tt;
    也就是每次生成都放到vector中,然后判断新生成的是不是被包含。
      

  4.   

    zez(思恩 为老婆多挣钱 13858318)
    如果取当然时间都已经可以不重复,再加上一个随机数怎么又会重复呢??当然不会重复,如果不加上随机数,在同一微秒内得出的数是会重复的!
      

  5.   

    binbin2000(binbin) 
    这样不可:)
    如果数据量很大的话,Vector不是会变得很大??系统资源都没了
    如果数据量小的话倒是可以这样做:)
      

  6.   

    用application范围的变量,然后每次加一,多线程的时候用一个统一的方法去获得这个数值,要线程同步
      

  7.   

    import java.util.*;public final class IdFactory {    private static final int timeout = 1000*30;
        private static int increment = 0;
        private Date date = new Date();
        private static IdFactory instance;    private IdFactory(){}    public static IdFactory getInstance(){
            if(instance==null){
               instance =  new IdFactory();
            }else{
                if(((new Date()).getTime() - instance.date .getTime())>timeout || instance.increment >=9){
                    instance.date = new Date();
                }
            }
            return instance;
        }    public synchronized String generate(){
            long code = date.getTime() ;
            return ""+code+(increment++);
        }    public static void main(String[] a){
            System.out.println(IdFactory.getInstance() .generate() );
            System.out.println(IdFactory.getInstance() .generate() );
            System.out.println(IdFactory.getInstance() .generate() );
            System.out.println(IdFactory.getInstance() .generate() );
            System.out.println(IdFactory.getInstance() .generate() );    }}
      

  8.   

    如果是生成随机的ID,那么重复了也没关系,把数据库的表的ID字段设置成“唯一索引”。那样如果产生的随机ID和表里面的重复了,就插不进数据库,然后根据errorCode就可以判断出来是重复了,然后就重新产生一个,只要把随机算法做的重复率很低就可以了。
      

  9.   

    从数据库中建立一个序列号,select 不就解决啦。
      

  10.   

    我做得是一个snmp网管manager,需要对网络设备采集数据,根据snmp协议,采集数据的请求消息中,必须有每次请求的id,这个id绝对不能重复和数据库无关的
      

  11.   

    那就好办了: id = 今天的日期 + 这是今天第几个请求
    比如今天是 2002-5-15  今天第100个请求 
    那就 id = 020515100***
    大概这个思路。不过需要个计数器,每天清零一次!
      

  12.   

    我也做过snmp的manager,
    你可以把每次产生的不重复数写入文件,新产生的数跟文件比较不就行了。
      

  13.   

    同步你取的数:
    如:
    long i_cus_no=0;
         synchronized(this)
         {
           Date d=new Date();
           i_cus_no=d.getTime();
           d=null;
         }
      

  14.   

    555555555555
    我做得是一个snmp网管manager,需要对网络设备采集数据,根据snmp协议,采集数据的请求消息中,必须有每次请求的id,这个id绝对不能重复和数据库无关的
    5555555555555555555555555
    这个还不简单,设备标识ID+工号ID+datetime不就唯一啦。
      

  15.   

    同意 lifejoy(活着的穿马甲中)
    重要的是选一个你合适的
      

  16.   

    这个要看你的需求特点,
    如果系统只有一个application会对DB操作,
    那么就用系统时间system.currentTimeMills()就足够保证唯一性了,
    当然不要再去加什么随机数了,哈哈,那样太可笑了.
    如果整个系统牵涉到复杂的多个子系统,
    那么就要改变策略,
    比如一个系统做服务负责产生ID,
    把它用jndi绑定,
    然后其它系统可以查找这个服务取得ID.
      

  17.   

    有随机数不行——看看随机数的生成机制就知道,那种随机是伪随机,不能保证随机性,上面很多朋友也否决了。
    用系统时间也有个问题 ,谁把系统时间改了咋办?这种全局唯一,一般是放在数据库中,保留一个对象相关数的最大值。
    既然你不想使用数据库,也可以使用文件,
    随机数可以分两部分产生:基数+偏移量
      基数是你的程序启动的次数,每启动一次取出基数+1,退出的时候存回去。
      偏移量是你本次程序启动期间被请求的次数(应该在int的范围以内吧。)不知道这种设想能不能解决楼主的问题。