Delphi 中哈希表TStringHash和THashedStringList性能速度

Delphi7:HashMap 键值对存储详解 Delphi 7 实现 HashMap 功能的解决方案摘要 在 Delphi 7 中,可通过以下方式模拟 HashMap: 推荐方案:使用 THashedStringList 支持字符串键值对,自动管理对象生命周期 高效查找(O(1)),原生支持无需第三方库 示例:HashMap.Values['key'] := 'value' 备选方案: TBucketList:支持任意键类型(需转为 Pointer),需手动释放对象 自定义类:封装 TBucketList 实现类型安全,适合复杂需求 第三方库:如 JV 阅读详情
Delphi的IniFiles单元中有两个哈希表类TStringHash和THashedStringList


【TStringHash】

优点:速度快,尤其是添加时(调用.Add)速度比THashedStringList快得多。
缺点:
1、Key只能是字符串,Value只能是数字
2、无法进行遍历


【THashedStringList】

优点:继承与TStringList,拥有TStringList所有功能,而且IndexOf、IndexOfName速度更快。
缺点:大量数据时,频繁的添加删除操作会耗费很多时间,例如调用Add函数1万次,需要几十秒的时间。
谁说Delphi没有哈希?--Delphi中,TStringList和THashedStringList的性能对比 曾经看到很多人在嚷嚷Delphi没有哈希表,这些人的动手意识姑且不论,却还有很多人以此来证明Delphi比别的语言垃圾,实在是...好,牢骚打住,转接正题。TStringList是我们常用的字符串列表类型,用法就不在这里赘述,但是,在数据其项数增多时,其搜索(主要是name/key搜索和indexof搜索)性能会急剧下降,原因是TStringList的内部存储使用了链表形式,而搜索操作使用 阅读详情

相关推荐

delphi 哈希表的简单实现案例

遇到一个需要使用键值对的小功能,原先的设计是通过读取配置文件的方式完成的,这样每一个各户需求不同,每个产品都需要进行机械的修改,使用哈希表减少了重复的操作。

StringHash字符串哈希

基于hash算法的字符串匹配

Stafen_的博客 2481

sram设计流程+memory compiler整理

→。

qq_50761108的博客 1万+

Delphi实现Hash表

Hash表,其实就是一个Key对应一个Object在Delphi里最简单实现Hash的就是TStrings通过它的AddObject,IndexOf,Objects等方法可以做一个很简单的Hash表。TStrings没有排序,所以IndexOf比较慢,而它的子类TStringList具有Stored属性,设置为True之后,IndexOf是用折半查找的,效率很高。所以在Delphi里可以用Tstr

记录成长的每一步 5212

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1670

逆向拆解Android车机:VehicleHal如何通过HIDL与CarService通信?

本文深入剖析了Android Automotive OS中VehicleHal与CarService通过HIDL进行通信的底层机制。从逆向工程视角出发,详细介绍了如何捕获和分析HIDL调用日志,解析关键属性数据结构,并演示了利用SocketComm工具进行恶意属性注入攻击的实战路径,为车机系统安全评估提供了技术参考。

soda5的博客 722

Delphi中的THashedStringList对象

    有许多程序员都喜欢使用TStringList类作为键值存储,这是不错的用法。但是TStringList本身只是对数据线性的存储,当数据量大时,对其检索效率极为低下。Delphi在在IniFiles 单元中定义了另一个TStringList类,采用了哈希技术存储数据,它就是THashedStringList类。下面这段代码就是摘自IniFiles单元中对THashedStringList的定

Chris Mao的专栏 3468

Reeds-Shepp曲线公式推导及代码实现-第三部分(共三部分)

根据原始起点的坐标和航向,将上一小节计算出来的局部进行整体的平移和旋转(与归一化的步骤刚好相反),最终得到全局路径的轨迹。根据计算出来的路径,选择路径最短的轨迹(也可根据我们实际的需要定制选优规则),作为最终的轨迹输出。Reeds-Shepp曲线公式推导及代码实现-第一部分(共三部分)Reeds-Shepp曲线公式推导及代码实现-第二部分(共三部分)的值进行等步长插值,得到每段轨迹对应的生成一系列插值距离列表。根据上一步生成的插值距离列表的值,计算其对应的局部位姿值。后,我们需要根据字段类型(

jianmo的博客 1089

Delphi 中的哈希表(1): THashedStringList

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton;...

weixin_33827590的博客 268

Python全栈项目--手机语音远程控制智能家居系统(含嵌入式控制)

摘要:本项目实现了一个基于Python全栈的智能家居语音控制系统,支持手机端语音指令控制家居设备。系统采用FastAPI后端+Vue3前端的架构,集成Web Speech API实现语音识别,通过嵌入式设备(如ESP32)执行硬件控制。功能包括用户认证、设备管理、场景联动、指令解析和日志记录,支持HTTP轮询和直推两种命令下发模式。项目涵盖物联网全链路开发,适用于课程设计或毕业设计原型开发。

exlink2012的专栏 882

高性能算力中心 — RDMA — Overview

目录 文章目录目录RDMA基于以太网的 RoCE/RDMA 计算优化NVMeNVMe Over Fabrics基于以太网的 NVMe 存储优化 RDMA RDMA(Remote DMA,远程直接内存访问)是一种新的内存访问技术,RDMA 让计算机可以直接存取其他计算机的内存,而不需要经过 CPU 耗时的处理。RDMA 将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。RDMA 技术的原理及其与 TCP/IP 架构的对比如下图所示。 InfiniBand(IB):从一开始就支持 R

烟云的计算 2366

Delphi中的THashTable

在Delphi中,Inifiles单元中有一个TStringHash的类,不过它的Value仅支持Integer(其实也不是问题,有其它类型可以将变量变为Pointer),有点不舒服,今天没事做就把它替换为variant了,其中Key的名称大小写无关,就是为了加快开发速度!使用Hashtable,查找和删除复杂度都是常数级别的!type PPHashItem = ^PHashItem

笑青天的专栏 2832

【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)

订阅智能体进阶(2)。不用爬虫,直接提取网页信息。从RunSubscription分离出AddSubscriptionTask的action,并且让SubscriptionRunner单独运行。

同学小张的博客 1588

TStringList 常用方法与属性 & DelimitedText空格问题 验证有效

测试同事帮反映了我们程序在处理委托时的一个问题:对于港股的委托,我们对它的成交回报中股票代码是空的。 加日志找到原因在这里,港股的委托其股票代码是5位,会左补一个空格,而在delphi中,对于TStringList 进行类似哈希表操作时,DelimitedText会自动判断空格并跳过。 导致reqtext.securityid一直为空,在后续的处理中出错。 function Make

陈宇的博客 2598

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Delphi7中 自己创建HashTable

在Delphi7以下版本中,我们发现库是不带HashTable这个类的,而这个类在java中被应用得风生水起。 一直想用Delphi7开发简单的数据库处理程序,但是我不想用Delphi中的那些个自动化的控件,不可控,不自由。 于是参照java,自己开发了很多类,包含字符串处理的,集合类。 对于多线程编程,队列也是一个基本类,一并开发了。自己开发的类有一个好处,就是方法随便添加,根据需要可以自由优化。那些通用的类和方法,通常性能是很差的,就如一个循环队列,Delphi本身就没有,别人开发的,测试了下,.

wjgit的专栏 802

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Delphi下的字符串Hash函数

有点奇怪,我在Google中查找"Delphi 字符串 Hash"居然找不到相关的Hash函数!正当我不知如何是好是,忽然想起开源的JEDI项目,这个大而全的项目虽然我极少使用,但我知道里面什么都有的。一看果然……   下面是我从JEDI里面提取出来的Hash函数: function StrHash(const SoureStr: string): Cardinal;   const    

cmx8818的博客 1819

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode--最长回文子串

public static String longestPalindrome(String s) { if (s == null || s.length() == 0) { return ""; } // 保存起始位置 int[] range = new int[2]; char[] str = s.toCharArray(); // 字符串打散成字符数组 for (int i = 0; i < s.length(); i++) {.

WGS. 432

Delphi 中的哈希表(2): TStringHash

Delphi 中的哈希表(2): TStringHashunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButt

Hmillet的专栏 1135

改编自TStringHash的Delphi哈希表类

Code 1unitzjHashedTable; 2 3interface 4 5uses 6SysUtils, 7Classes; 8 9type 10TzjStringHashProc=function(constaKey:string):Cardinal; 11TzjHashItemDispose...

weixin_30488313的博客 162

Delphi 哈希 THashedStringList

RAD Studio 10.3.3 测试√ procedure TForm1.Button_HashedStringListClick(Sender: TObject); var mHash: THashedStringList; // uses IniFiles; i: Integer; begin // 哈希表是通过哈希值来访问的,通过一定的内存浪费获取检索速度,在检索项时是不需要逐一检索。 mHash := THashedStringList.Create; try

小印丶的笔记 745

关于Hashtable与Dictionary性能的讨论

关于Hashtable与Dictionary性能的讨论。<br />     看了eaglet的《几种C#框架提供的数据结构对单值查找的效率比较 》,发现作者对Hashtable与Dictionary<K, V>存在一些误解,抽点空,讲讲我对Hashtable与Dic的看法。<br /> <br />     我个人是觉得,无论什么时候,都应该使用Dictionary<K,V>,理由如下:<br />      1、Dic是类型安全的,这有助于我们写出更健壮更具可读性的代码,而且省却我们强制转化的麻烦。

ang639 1997

Delphi的哈希表(一)

Delphi的哈希表(一) 哈希表是通过哈希值来访问的,通过一定的内存浪费获取检索速度,在检索项时是不需要逐一检索。在编程中有一定的好处。 unit Unit1; interface uses Windows, Messages, SysUt...

467
上一篇: Delphi出现 No mapping for the Unicode character exists in the target multi-byte code page 处理方法
下一篇: 为TMenuItem增加指针Data属性
李正己
博客等级 码龄25年 53粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值