gpt4 book ai didi

java - 每次添加新轨道时递增计数器,并始终选择尚未分配的最小值 (>=1)

转载 作者:行者123 更新时间:2023-12-01 19:29:26 25 4
gpt4 key购买 nike

我目前正在开发一个火车模拟项目,我有一个列表,其中保存了所有轨道:

    private List<Track> tracks;

public void addTrack(Track track) {
this.tracks.add(track);
}

public void removeTrack(Track track) {
if (!tracks.contains(track)) {
this.tracks.remove(track);
} else {
Terminal.printError("track with id " + track.getId() + " doesn't exist.");
}
}

我想在添加每个轨道时为其分配一个 ID(从 1 开始)。此外,总是选择下一个空闲ID。例如,如果分配了 ID 1,3,4,5,则使用下一个 ID 2。

E.例如:

添加轨道... -> ID:1

添加轨道... -> ID:2

删除轨道 1

添加轨道... -> ID:1

我会使用 map ,每次添加新轨道时,计数器都会加一。但是,如果我删除 ID 并添加新轨道,就会出现“间隙”。

有什么好的方法可以做到这一点?

最佳答案

一种方法是在另一个数据结构(可能是 BitSet)中跟踪每个分配的 ID,特别是 BitSet#nextClearBit(int)方法

所以每次你在 List<Tracks> 中放入一些东西时,您在 BitSet 中设置相对索引并删除当 Track已移除。

类似下面的内容

BitSet b = new BitSet();
// set the bits while adding tracks
b.set(0);
b.set(1);
b.set(2);

b.clear(1); // some track gets removed, so unset the bit
System.out.println(b); // {0, 2}

System.out.println(b.nextClearBit(0)); // 1

关于java - 每次添加新轨道时递增计数器,并始终选择尚未分配的最小值 (>=1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60209768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com