Wenn Du mit 2^16 Übertragungen rechnest, solltest Du deine Lookuptabelle nicht als unsortiertes Array konzipieren. Verwende lieber doppelt-verkettete Liste für die freigegebenen Sende-IDs.
Delphi-Quellcode:
Function GetNewID : Integer;
Begin
If FreeList.IsEmpty
Then begin
If HighestID = MAXWORD
Then Raise Exception....;
HighestID := HighestID + 1;
Result := HighestID;
End
else Begin
Result := FreeList.First;
FreeList.RemoveFirstElement;
End;
End;
Procedure DiscardUsedID (aIDWhichIsNoLongerInUse : Integer);
Begin
FreeList.InsertAtFront(aIDWhichIsNoLongerInUse);
End;
So ist der Aufwand immer O(1), anstatt O(n) bei deiner Variante.