TList效率的问题(10分)

  • 主题发起人 主题发起人 wq_quake
  • 开始时间 开始时间
W

wq_quake

Unregistered / Unconfirmed
GUEST, unregistred user!
最近需要用到3层以上的TList原来准备还用原来写好的链表后来想还是用TList吧方便,不过以前的经验TList并不是很优化,速度慢关键就是Delete 和Remove。问题很显然就在链表的重组上。以前有几位大侠写了继承的TList效率非常高。但是毕竟不是很方便。我想了一个很方便的方法能够提高速度,希望对大家能有所帮助。
Delete最末一条记录的速度应该是最快的因为不用链表重组,直接删除就行了。所以我想到的就是delete(n)那么就将n和最末条内容想换(其实就是指针重新赋值)再删除最后一条。速度将大大提高。关于Remove也是同样先indexof之后再调换顺序。
Indexof尽管也会有些慢但在百万条内速度还是很快的。
 
8错8错
能不能讲一下list的最后一条是怎么找到并判断出来的?
我记得好像链表删除只需要将其后续成员挂到前驱上就可以了亚
先挪一下是不是已经浪费了一些时间?
 
procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;
 
对了换位置就用Exchange就可以了非常快
 
自己写链表,很快第
 
对于自己写的链表在维护上和其他属性上很麻烦。而TList可以很容易的得到count还有实现交换数据等等 定位啊都很方便
 
嗷!嗷!嗷!
大力支持楼主!
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
后退
顶部