请您详细说明使用“标准表”,“哈希表”或“简称表”之间的区别。 “初始大小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.
答案 0 :(得分:19)
TYPE STANDARD TABLE OF
和TYPE 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 TABLE
或UNIQUE
密钥声明NON-UNIQUE
的表格。读取记录的成本低于STANDARD
表的成本,因为它允许BINARY SEARCH
,但比HASHED
表的成本更多。写入成本比STANDARD
表稍贵,但比HASHED
表少。
答案 1 :(得分:7)
标准表
如果要使用索引处理单个表条目,这是最合适的类型。索引访问是最快的访问。您应该通过附加行(ABAP APPEND语句)来填充标准表,并通过指定索引(带有相关ABAP命令的INDEX选项)来读取,修改和删除条目。标准表的访问时间与表条目的数量呈线性关系。如果您需要密钥访问,如果您可以在单独的步骤中填写和处理表,则标准表特别有用。例如,您可以通过附加条目来填充表,然后对其进行排序。如果您使用具有密钥访问权限的二进制搜索选项,则响应时间与表条目的数量成对数。
哈希表
对于主要操作是密钥访问的任何表,这是最合适的类型。您无法使用其索引访问散列表。无论表条目的数量如何,密钥访问的响应时间都保持不变。与数据库表一样,散列表始终具有唯一键。如果要构造和使用类似于数据库表的内部表或处理大量数据,则散列表非常有用.manu