Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成列表中的对象未获取的ID_Java_Arrays - Fatal编程技术网

Java 生成列表中的对象未获取的ID

Java 生成列表中的对象未获取的ID,java,arrays,Java,Arrays,我有一个实体列表。每个实体都有属性uuid和其他一些属性。现在我想创建一个实体管理器。经理可以创建新实体,并且必须根据所有实体的列表为实体查找新的未使用id。这是我目前的做法: @AllArgsConstructor public class Entity { @Getter @Setter private long id; } 公共类实体管理器{ 私有静态最终最大金额=Setting.getInstance().getAmountUUID(); 私人名单实体; 私有长形分

我有一个实体列表。每个实体都有属性uuid和其他一些属性。现在我想创建一个实体管理器。经理可以创建新实体,并且必须根据所有实体的列表为实体查找新的未使用id。这是我目前的做法:

@AllArgsConstructor
public class Entity {

    @Getter @Setter
    private long id;

}
公共类实体管理器{
私有静态最终最大金额=Setting.getInstance().getAmountUUID();
私人名单实体;
私有长形分配ID;
公共实体管理器(){
实体=新的ArrayList();
lowestUnassignedEid=0;
}
公共长辈伟德(){
如果(分配ID<最大金额\u UUID){
返回指定的ID++;
}否则{
//之后如何检查。
//很多实体将被删除,所以有很多免费的uuid
//但我们怎么才能知道呢?
}
}
公共实体createEntity(){
实体e=新实体(generateNewEid());
增加(e);
返回e;
}
公共无效删除实体(实体){
本.实体.删除(实体);
}
}

我越想它,它就越倾向于使用地图。这样我就可以检查键集中是否有数字。或者有没有一个合适的方法来列出清单

你永远不会达到
长。最大值
那么为什么要在意呢?这是
2^64
。即使您删除了项目,并且有免费的uuid,您也可能不在乎,因为我不知道是否必须降低此边界,所以在最大值之前您有足够的空间。在本例中,它是硬编码的,但在实际代码中它是一个属性。如果我现在可以修复它,我不会在功能中出现一种“溢出”-Bug。你可以在
long
中存储一个小于
long.MAX\u值的值,这样就可以了。如果ID是
int
yes,这将是一个问题,因为int在32b上,这里一切正常。你是对的。UUID可以位于0到2^64的边界内,但List.size()不应位于属性上方。-但是为了让我安心,如果达到边界,我将记录一个错误。你是对的,列表受Inter.MAX\u值限制,但这是40亿元素。你永远不会达到
Long.MAX\u值,那么为什么要在意呢?这是
2^64
。即使您删除了项目,并且有免费的uuid,您也可能不在乎,因为我不知道是否必须降低此边界,所以在最大值之前您有足够的空间。在本例中,它是硬编码的,但在实际代码中它是一个属性。如果我现在可以修复它,我不会在功能中出现一种“溢出”-Bug。你可以在
long
中存储一个小于
long.MAX\u值的值,这样就可以了。如果ID是
int
yes,这将是一个问题,因为int在32b上,这里一切正常。你是对的。UUID可以位于0到2^64的边界内,但List.size()不应位于属性上方。-但是为了让我安心,如果达到边界,我将记录一个错误。你是对的,列表受Inter.MAX_值限制,但这是40亿个元素
public class EntityManager {

    private static final MAX_AMOUNT_UUID = Setting.getInstance().getAmountUUID();

    private List<Entity> entities;
    private long lowestUnassignedEid;

    public EntityManager() {
        entities = new ArrayList<>();
        lowestUnassignedEid = 0;
    }

    public long generateNewEid(){
        if (lowestUnassignedEid < MAX_AMOUNT_UUID ) {
            return lowestUnassignedEid++;
        } else {
           // How to check after this. 
           // a lot of the entities will be removed so there are a lot of free uuid
           // but how can find out ? 
        }
    }

    public Entity createEntity(){
         Entity e = new Entity(generateNewEid());
         entities.add(e);
         return e;
    }

    public void removeEntity(Entity entity){
        this.entities.remove(entity);
    }
}