tag:blogger.com,1999:blog-18551162.post1802962713926707421..comments2022-11-18T03:47:50.147-06:00Comments on Blog de Carlos G: ¿Sabes lo que es un hashmap?Carlos Ghttp://www.blogger.com/profile/09121978431155592667noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-18551162.post-10985222655754634042013-07-22T09:41:46.973-05:002013-07-22T09:41:46.973-05:00I want you (She's so heavy)I want you (She's so heavy)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18551162.post-88751399026782817742012-07-26T10:52:40.264-05:002012-07-26T10:52:40.264-05:00Me gustaria a mi tomar un curso en programacion we...Me gustaria a mi tomar un curso en programacion web, si alguien sabe de alguno por favor digame donde puedo inscribirme que voy corriendo en el <a href="http://www.deautos.com/autos-volkswagen-gol/MAYY395WWMOYY1950" rel="nofollow">gol</a>Mariohttps://www.blogger.com/profile/05027546212619413353noreply@blogger.comtag:blogger.com,1999:blog-18551162.post-38361582600171641472012-01-25T12:56:33.950-06:002012-01-25T12:56:33.950-06:00eso no es un hashmap, es un mapeso no es un hashmap, es un mapAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-18551162.post-74466492928615557802010-06-07T19:07:39.117-05:002010-06-07T19:07:39.117-05:00hi guys ... I was very pleased to read the informa...hi guys ... I was very pleased to read the information in this article ... was of great interest and would love to get a lot more information about¿Sabes lo que es un hashmap?costa rica hotelshttp://www.costaricaindex.com/noreply@blogger.comtag:blogger.com,1999:blog-18551162.post-48286409796908592212008-11-30T11:15:00.000-06:002008-11-30T11:15:00.000-06:00Hola Carlos.Primero que nada la diferencia entre 9...Hola Carlos.<BR/><BR/>Primero que nada la diferencia entre 942 ms y 90 ms no es 90% sino 1000% (10 veces más) :p.<BR/><BR/>Por otro lado, como comentaron más arriba, el tiempo de agregado depende en buena medida de la cantidad de memoria reservada desde el inicio (habría que hacer otra prueba con la propiedad Capacity inicializada a 100000).<BR/><BR/>En cuanto a la búsqueda, no dudo que sea más rápida la clase especializada. Sería interesante ver cómo guarda las cadenas de caracteres y la manera en que realiza la indexación.<BR/><BR/>Gracias por darnos a conocer esta clase TJclStrStrHashMap.<BR/><BR/>Al González. :)Al Gonzálezhttps://www.blogger.com/profile/01863287140078495218noreply@blogger.comtag:blogger.com,1999:blog-18551162.post-36563265315743118742008-09-18T08:39:00.000-05:002008-09-18T08:39:00.000-05:00bueno se les agradece por lo naqui consignado me ...bueno se les agradece por lo naqui consignado me ha servido de mucho ok osea...Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18551162.post-11079608262581918542008-08-22T18:03:00.000-05:002008-08-22T18:03:00.000-05:00Al parecer la diferencia radica en que para el cas...Al parecer la diferencia radica en que para el caso del hashmap ya se tienen definidas el total de cadenas que seran almacenadas, mientras que para el TStringList no; estoy conlleva a que cada vez que se agregue una cadena al stringlist se verifique la disponibilidad de la memoria y se redimensione la capacidad del objeto.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18551162.post-78334381750688827252008-08-01T01:06:00.000-05:002008-08-01T01:06:00.000-05:00Efectivamente, poco queda por decir... solo que de...Efectivamente, poco queda por decir... solo que deberemos utilizar los hashmap a partir de ahora...Jose Albertohttps://www.blogger.com/profile/09364256238938503828noreply@blogger.comtag:blogger.com,1999:blog-18551162.post-16075584530805018102008-07-31T17:52:00.000-05:002008-07-31T17:52:00.000-05:00Jeje ... ya dije que había que comparar. Y ahora, ...Jeje ... ya dije que había que comparar. Y ahora, con datos en la mano, ya no tengo mas que decir.<BR/><BR/>Tendré que echarle un vistazo a esas clases por dentro para ver que las hace tan rápidas<BR/><BR/>SaludosDomingo Seoanehttps://www.blogger.com/profile/03589741303754743882noreply@blogger.comtag:blogger.com,1999:blog-18551162.post-55905393202401108522008-07-31T17:04:00.000-05:002008-07-31T17:04:00.000-05:00Que tal Domingo!...Pues te tengo noticias, no solo...Que tal Domingo!...<BR/><BR/>Pues te tengo noticias, no solo el hashmap es más rápido, sino que es <B>Violentamente más rápido</B>!!<BR/><BR/>Entre la JCL hay un demo que permite comparar el desempeño de las diferentes clases para manejo de datos estructurados llamado "Container Performance", ahi puedes probar que clase te sirve mejor para que caso.<BR/><BR/>Como lo puedes probar es con un ejemplo sencillo y simple:<BR/><BR/>Aqui lo que hago es agregar a ambas clases 100,000 cadenas aleatorias y medir el tiempo que se tardó la clase en indexarlas; despues hago 100,000 lecturas preguntando también por diferentes cadenas y midiendo el tiempo que se tardó en resolver todas mis peticiones, y los resultados son los siguientes en mi equipo:<BR/><BR/>TStringList Sorted:<BR/>Agregar Todas : 921.0 ms<BR/>100 mil lecturas : 942.0 ms<BR/><BR/>TestJclStrStrHashMap:<BR/>Agregar Todas: <B>50.0 ms</B><BR/>100 mil lecturas: <B>90.0 ms</B><BR/><BR/>Asi que tengo una mejora en velocidad del <B>90%</B> mas o menos (que mas da unas decimas arriba o abajo)<BR/><BR/>Incluso en la VCL hay una clase THashedStringList que sería el equivalente de usar estas listas de cadenas pero con el beneficio de la estructura de los Hashes, pero aún esta clase no resulta tan rápida como la implementación de los Hashes del la JCL.<BR/><BR/>Aquí esta el código que use para probar mis números, solo se necesita un Tstringgrid y un botón en un formulario para que funcione.<BR/><BR/><BR/>uses JclContainerIntf, JclHashMaps;<BR/><BR/>const<BR/> ResultFormat = '%.1f ms';<BR/> MsecsPerDay = 24 * 60 * 60 * 1000;<BR/><BR/>function GenId(Value: Integer): string;<BR/>begin<BR/> Result := IntToStr(random(Value));<BR/>end;<BR/><BR/>procedure TestJclStrStrHashMap(Results: TStrings);<BR/>var<BR/> Map: IJclStrStrMap;<BR/> I: Integer;<BR/> Res: string;<BR/> Start: TDateTime;<BR/>begin<BR/> Randomize;<BR/> Screen.Cursor := crHourGlass;<BR/> try<BR/> Start := Now;<BR/> Map := TJclStrStrHashMap.Create(100000);<BR/> for I := 0 to 100000 do<BR/> Map.PutValue(GenId(123), '');<BR/> Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);<BR/> Start := Now;<BR/> for I := 0 to 100000 do<BR/> Res := Map.GetValue(GenId(123));<BR/> Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);<BR/> Start := Now;<BR/> Map.Clear;<BR/> Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);<BR/> finally<BR/> Screen.Cursor := crDefault;<BR/> end;<BR/>end;<BR/><BR/>procedure TestStringList(Results: TStrings);<BR/>var<BR/> Map: TStringList;<BR/> I: Integer;<BR/> Index: Integer;<BR/> Start: TDateTime;<BR/>begin<BR/> Randomize;<BR/> Screen.Cursor := crHourGlass;<BR/> try<BR/> Start := Now;<BR/> Map := TStringList.Create;<BR/> Map.Sorted := True;<BR/> for I := 0 to 100000 do<BR/> Map.Add( GenId(123));<BR/> Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);<BR/> Start := Now;<BR/> for I := 0 to 100000 do<BR/> Index := Map.IndexOf(GenId(123));<BR/> Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);<BR/> Start := Now;<BR/> Map.Clear;<BR/> Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);<BR/> finally<BR/> Screen.Cursor := crDefault;<BR/> end;<BR/>end;<BR/><BR/>procedure TForm2.Button1Click(Sender: TObject);<BR/>begin<BR/> TestStringList(JvStringGrid1.Cols[1]);<BR/> TestJclStrStrHashMap(JvStringGrid1.Cols[2]);<BR/>end;<BR/><BR/>En este artículo he sido muy austero, en el próximo ahondaré mas en este tema de los hashes y los tips que utilizo para sacarles el mejor provecho.<BR/><BR/>Saludos =:-)Carlos Ghttps://www.blogger.com/profile/09121978431155592667noreply@blogger.comtag:blogger.com,1999:blog-18551162.post-73384571206072214412008-07-31T07:23:00.000-05:002008-07-31T07:23:00.000-05:00Me pregunto si sera mucho mas rápido que usar un T...Me pregunto si sera mucho mas rápido que usar un TStringList ordenado (Sorted:= TRUE), en ese caso el método IndexOf utiliza una búsqueda de tipo binaria que me parece bastante rápido. Además con el TStringList también puedes manejar objetos (en realidad cualquier puntero) con el método AddObject.<BR/><BR/>Tendríamos que comparar, pero no creo que pueda ser muchos mas rápido.Domingo Seoanehttps://www.blogger.com/profile/03589741303754743882noreply@blogger.comtag:blogger.com,1999:blog-18551162.post-68875929018080960242008-07-31T06:01:00.000-05:002008-07-31T06:01:00.000-05:00Y.... ¿Cómo se utilizaría con objetos? ¿Se podría ...Y.... ¿Cómo se utilizaría con objetos? ¿Se podría busca un objeto por el valor de cualquiera de sus propiedades, o sería por una "clave principal"?Jose Albertohttps://www.blogger.com/profile/09364256238938503828noreply@blogger.com