我目前正在进行一个列车模拟项目,我有一个列表,其中保存了所有轨道:
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。g、 地址:
添加曲目…->编号:1
添加曲目…->编号:2
拆下履带1
添加曲目…->编号:1
我会使用一个Map,每次我添加一个新的轨道,增加一个计数器。但是,如果我删除了一个id,并添加了一个新的轨道将有“差距”。
做这件事的好方法是什么?
2条答案
按热度按时间9q78igpj1#
就像赛义夫·阿西夫在回答中提到的那样,你可以使用另一个数据结构来跟踪id。
bitset是一种方法,另一种方法是使用treeset跟踪您分配和撤销的id,这将使id保持有序
例如
所以在你的例子中
jw5wzhpr2#
一种方法是在另一个数据结构(可能是位集)中跟踪每个分配的id,特别是位集#nextclearbit(int)方法
所以每次你把东西放进
List<Tracks>
,则在位集中设置相对索引,并在Track
已删除。像下面这样