两种执行相同功能的方法,这是首选的吗?是否有更好的替代方案?

时间:2016-05-02 03:50:23

标签: java boolean

我有两个版本的方法都执行相同的功能。他们都试图生成一个随机的6位数字(转换为String uuid)并通过将其与用户列表进行比较来检查它是否唯一。 uuid(此处未显示)。它将继续运行,直到生成的数字是唯一的。

因为我还是java的初学者,所以我只是想知道哪个版本更正确?此外,这两种方法都有更好的替代方案吗?

String getNewUserUUID(){

    //inits
    String uuid = "";
    Random randomNumberGenerator = new Random();
    int length = 6;
    boolean unique;

    //continue looping until we get a unique ID
    do {
        unique = false;
        //generate number
        for(int i = 0; i < length; i++){
            uuid += randomNumberGenerator.nextInt(10);
        }

        //check to make sure it's unique
        for(User u : users){
            if(uuid.compareTo(u.getUUID()) != 0){
                unique = true;
            }
        }
    } while (!unique);

    return uuid;
}


//version 2
String getNewUserUUID(){

    //inits
    String uuid = "";
    Random randomNumberGenerator = new Random();
    int length = 6;

    boolean nonUnique;

    do {
        //generate the uuid
        for (int i = 0; i < length; i++){
            uuid += randomNumberGenerator.nextInt(10);
        }

        //check to make sure it's unique
        nonUnique = false;
        for(User u : this.users){
            if(uuid.compareTo(u.getUUID()) == 0){
                nonUnique = true;
                break;
            }
        }

    } while (nonUnique);

    return uuid;
}

2 个答案:

答案 0 :(得分:3)

使用java.util.UUID或创建UUID的各种第三方库。

他们将使用各种信息生成一个UUID,以便在创建时可以知道它是唯一的,而不必“选择一些随机的东西,检查所有其他UUID,看看是否有重复”你正在做的循环。

是否需要6位数的UUID,或者您只是以此为例?

如果您的UUID确实是6位数字,那么可能会将java.util.concurrent.atomic.AtomicInteger初始化为100000,并让您的生成UUID方法只返回AtomicInteger.getAndIncrement()返回的内容(我正在遗漏任何错误检查 - 如果你的UUID正好是6位数,那么显然你需要做一些检查,并在你到达999999时采取任何适当的行动):

final public class PoorMansUuid
{
    private static final AtomicInteger counter = new AtomicInteger(100000);

    public static int generateUuid() {
        return counter.getAndIncrement();
    }
}

答案 1 :(得分:1)

没有单一的&#34;正确的&#34;办法。但是,如果您正在寻找替代方案,那么这里有一个更简单,更有效的方法,IMO:

String getNewUserUUID(){

    //inits
    Random randomNumberGenerator = new Random();
    final int length = 6;

    //continue looping until we get a unique ID
    while (true) {
        //generate number
        StringBuilder sb = new StringBuilder(length);
        for(int i = 0; i < length; i++){
            sb.append(randomNumberGenerator.nextInt(10));
        }
        String uuid = sb.toString();

        //check to make sure it's unique
        for(User u : users){
            if(uuid.equals(u.getUUID())){
                continue;
            }
        }

        return uuid;
    }
}