Wieviele solcher Int64 willst du erwartungsgemäß verwalten ?
Das einzigste Problem mit meinem obigen Vorschlag wäre das Einfügen eines neuen Int64 in die Liste. Da dann Speicherkopierungen nötig wären. Wenn du aber nur maximal 2^16 solcher Werte verwalten willst dann wäre der beste Weg ein Array mit verlinkten Int64 Werten zu benutzen. D.h. ein Eintrag sähe so aus
Delphi-Quellcode:
type
TEntry = packed record
Value: Int64; // array[0..63] of Boolean
Next: Word; // Index des nächsten Eintrages in TEntryArray
end;
TEntryArray = array of TEntry;
TEntryArray wird succesive blockweise vergößert. Also zb. erst 1024, 2048,4096 usw. Bei 65535 max. Einträgen würden so nur 7 Reallokationen dieses Arrays auftreten. Mit 2^16 Einträgen würde das Array 2^16*10 = 650Kb im Speicher benötigen. Das Einfügen eines neuen Wertes benötigt KEINERLEI Kopieroperationen, da der neue Wert nur ans Ende des Arrays angehangen wird. Die Binäre Suche ist dagegen ein bischen komplizierter, da nun das Array über deren .Next Einträge durchsucht werden müsste. Für einen neuen Wert sucht man im Array den Eintrag der der kleinste Eintrag genau vor dem neuen Wert ist. Dessen .Next wird auf die Anzahl der im Array gespeicherten Einträge gesetzt, also auf den neuen Eintrag. Der neue Eintrag wird als letzer im Array eingefügt und dessen Next wird auf das Next des kelinesten Eintrages gesetzt. Danach wird der Counter für die Anzahl der Einträge im Array um eins hochgezählt.
Gruß Hagen