标准表和哈希表Abap之间的差异

标准表和哈希表Abap之间的差异,abap,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 KE

你能给我一个清楚的解释一下使用“标准表”、“哈希表”或简单的“表”的区别吗。“初始尺寸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.

TYPE-STANDARD TABLE of
TYPE-TABLE of
的含义完全相同,如果没有其他规定,则暗示
STANDARD
。但是,在OO上下文中,您现在需要完全声明内部表,并且不能忽略添加的
标准。在这种情况下,它只是一个股票标准的内部表,可以通过读取表索引或通过键(如果您已手动对表排序)来访问

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

初始大小0
也是对代码的冗余使用-这意味着内存分配将在设置块中进行。(我不确定此大小是预定义的,还是可根据基础配置的),但初始大小0是默认值。如果希望内存分配以10倍于内部表中行数的集合进行,则可以使用“初始大小10”,但在大多数情况下,保留默认内存分配要比尝试强制分配要好

另外


类型排序表的表可以用
唯一的
键或
非唯一的
键声明。读取记录的成本低于标准的
表,因为它允许
二进制搜索
,但高于散列的
表。编写的成本略高于标准表,但低于散列表。

标准表

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

哈希表


对于主操作为键访问的任何表,这是最合适的类型。不能使用哈希表的索引访问哈希表。键访问的响应时间保持不变,与表项的数量无关。与数据库表一样,哈希表始终具有唯一的键。如果要构造和使用类似于数据库表的内部表或处理大量数据,哈希表非常有用。manu

“的类型标准表和类型表的含义完全相同”-不,不是。表的类型是泛型类型定义,它(例如在方法声明中)表示“任何类型的表”。只有在数据定义中,类型表才被“扩展”为实际类型的标准表。如果您遵循下面Rene提供的链接,并向下滚动到“完全指定的表”部分,您将看到标准表和just表可以互换使用。要定义泛型表,您可以使用类型索引表,或键入任何表。@vwegert我很困惑。如果我省略了“标准”一词,会在哪里造成伤害?