标准表和散列表Abap之间的区别

Siv*_*va 9 sap abap

能否请您详细解释使用"标准表","哈希表"或简称"表"之间的区别."初始大小0"的含义是什么?

如需参考,请查看以下代码..

it_c01_d006_raw TYPE STANDARD TABLE OF /bic/ac01_d00600
                       INITIAL SIZE 0,
it_c01_d006     TYPE HASHED TABLE OF /bic/ac01_d00600
                       WITH UNIQUE KEY /bic/cemployee /bic/cdatetype,
it_c01_d002     TYPE TABLE OF /bic/ac01_d00200.
Run Code Online (Sandbox Code Playgroud)

Est*_*sti 19

如果没有指定其他内容,则暗示TYPE STANDARD TABLE OF和的含义TYPE TABLE OF完全相同STANDARD.但是,在OO上下文中,您现在需要完全声明内部表,并且您将无法省略该STANDARD添加.在这种情况下,它只是一个股票标准内部表,可以通过读取每个表索引来访问,如果您已手动对表进行排序,则可以通过键访问.

一个表的TYPE HASHED TABLE创建了使用内部的HASH算法表示的内部表,从而允许读出到其中成本是(通过近似)独立于所述表的大小的表.当您拥有大量读取数据集但写入相对较少时,使用这种类型的表是很好的.在声明哈希表时,您还必须声明一个UNIQUE KEY,因为HASH算法依赖于此.

INITIAL SIZE 0也是代码的冗余使用 - 这意味着内存分配将在集合块中发生.(我不确定此大小是预定义的,还是由BASIS配置的),但INITIAL SIZE 0是默认值.如果您希望内存分配以10倍于内部表中行数的方式进行,那么您将使用"INITIAL SIZE 10",但在大多数情况下,保留默认内存分配比尝试强制它更好.

此外

TYPE SORTED TABLE可以使用a UNIQUENON-UNIQUEkey 声明一个表.读取记录的成本低于STANDARD表的成本,因为它允许a BINARY SEARCH,但多于表的成本HASHED.写入的成本比STANDARD表格略贵,但比HASHED表格要低.

  • 实际上,如果您按照下面的Rene提供的链接,向下滚动到"完全指定的表"部分,您将看到STANDARD TABLE和TABLE可以互换使用.要定义通用表,可以使用TYPE INDEX TABLE或TYPE ANY TABLE. (4认同)

Dhi*_*vya 7

标准表

如果要使用索引处理单个表条目,这是最合适的类型.索引访问是最快的访问.您应该通过附加行(ABAP APPEND语句)来填充标准表,并通过指定索引(带有相关ABAP命令的INDEX选项)来读取,修改和删除条目.标准表的访问时间与表条目的数量呈线性关系.如果需要密钥访问,如果可以在单独的步骤中填充和处理表,则标准表特别有用.例如,您可以通过附加条目来填充表,然后对其进行排序.如果使用带密钥访问的二进制搜索选项,则响应时间与表条目数成对数关系.

哈希表

对于主要操作是密钥访问的任何表,这是最合适的类型.您无法使用其索引访问散列表.无论表条目的数量如何,密钥访问的响应时间都保持不变.与数据库表一样,散列表始终具有唯一键.如果要构造和使用类似于数据库表的内部表或处理大量data.manu,散列表非常有用.