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

时间:2012-02-24 17:29:02

标签: 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.

2 个答案:

答案 0 :(得分:19)

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

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

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

另外

可以使用TYPE SORTED TABLEUNIQUE密钥声明NON-UNIQUE的表格。读取记录的成本低于STANDARD表的成本,因为它允许BINARY SEARCH,但比HASHED表的成本更多。写入成本比STANDARD表稍贵,但比HASHED表少。

答案 1 :(得分:7)

标准表

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

哈希表

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