hi meyer,

Kudos to you for such a test.

Can you try this one for me. I could have tested here but would prefer to
run on the same configuration that you ran old test on. i didn't check for
syntax errors :)

private static class ShiftBitMap extends HashMap
{
        public Object put(Object key, Object value)
        {
                return super.put(this.generateKey(key.toString()),value);
        }

        public Object get(Object key)
        {
                return super.get(this.generateKey(key.toString()));
        }

        private Object generateKey(String str)
        {
                byte[] bytes = str.getBytes();
                int len = bytes.length();

                for (int i=0; i<len; i++) bytes[i] <<= 3;
                return new String(bytes);
        }
}

>-----Original Message-----
>From: Guillermo Meyer [mailto:[EMAIL PROTECTED]
>Sent: Saturday, February 14, 2004 8:16 PM
>To: 'Struts Users Mailing List'
>Subject: RE: [OT] Case insensitive Map keys [Results]
>
>
>Navjot is the winner by now, this the code I'm using to test and the
>results.
>Thanks for your responses.
>
>Guillermo.
>
>-------------------------------------------------------------
>| Executing performance test in Case Insensitive Maps       |
>-------------------------------------------------------------
>-------------------------------------------------------------
>Run: 1/3
>       Time (ms): 2312: MapTester$UpperCaseMap
>       Time (ms): 1469: MapTester$TreeMapUpperCaseMap
>       Time (ms): 812: MapTester$IgnoreCaseIntegerMap
>       Time (ms): 766: MapTester$IgnoreCaseBitMap
>-------------------------------------------------------------
>-------------------------------------------------------------
>Run: 2/3
>       Time (ms): 2234: MapTester$UpperCaseMap
>       Time (ms): 1391: MapTester$TreeMapUpperCaseMap
>       Time (ms): 766: MapTester$IgnoreCaseIntegerMap
>       Time (ms): 750: MapTester$IgnoreCaseBitMap
>-------------------------------------------------------------
>-------------------------------------------------------------
>Run: 3/3
>       Time (ms): 2203: MapTester$UpperCaseMap
>       Time (ms): 1390: MapTester$TreeMapUpperCaseMap
>       Time (ms): 813: MapTester$IgnoreCaseIntegerMap
>       Time (ms): 797: MapTester$IgnoreCaseBitMap
>-------------------------------------------------------------
>
>And this is the code:
>
>import java.util.HashMap;
>import java.util.Map;
>import java.util.TreeMap;
>
>public class MapTester {
>       final long running = 200000;
>
>       MapTester() {
>
>System.out.println("----------------------------------------------------
>---------");
>               System.out.println("| Executing performance test in Case
>Insensitive Maps       |");
>
>System.out.println("----------------------------------------------------
>---------");
>       }
>
>       private void runTest(Map mapa) {
>               long init = System.currentTimeMillis();
>               for(int i=0;i<running;i++) {
>                       mapa.put("propertyName1", new Integer(i+1));
>                       mapa.put("propertyName2", new Integer(i+2));
>                       mapa.put("propertyName3", new Integer(i+3));
>                       mapa.put("propertyName4", new Integer(i+4));
>                       mapa.put("propertyName5", new Integer(i+5));
>
>               }
>
>               for(int i=0;i<running;i++) {
>                       mapa.get("PropertyName1");
>                       mapa.get("PropertyName2");
>                       mapa.get("PropertyName3");
>                       mapa.get("PropertyName4");
>                       mapa.get("PropertyName5");
>               }
>
>               long end = System.currentTimeMillis();
>               System.out.println("\tTime (ms): " + (end - init) + ": "
>+ mapa.getClass().getName());
>       }
>
>
>       public static void main(String[] args) {
>               int cantCorridas=3;
>               MapTester mt = new MapTester();
>               for(int i=0;i<cantCorridas;i++) {
>
>System.out.println("----------------------------------------------------
>---------");
>                       System.out.println("Run: " + (i+1) + "/" +
>cantCorridas);
>
>                       mt.runTest(new UpperCaseMap());
>
>                       mt.runTest(new TreeMapUpperCaseMap());
>
>                       mt.runTest(new IgnoreCaseIntegerMap());
>
>                       mt.runTest(new IgnoreCaseBitMap());
>
>System.out.println("----------------------------------------------------
>---------");
>               }
>       }
>
>       private static  class UpperCaseMap extends HashMap {
>               public Object put(Object key, Object value) {
>                       return super.put(key.toString().toUpperCase(),
>value);
>               }
>
>               public Object get(Object key) {
>                       return
>super.get((key.toString()).toUpperCase());
>               }
>       }
>
>       private  static class TreeMapUpperCaseMap extends TreeMap {
>               public TreeMapUpperCaseMap() {
>                       super(String.CASE_INSENSITIVE_ORDER);
>               }
>       }
>
>       private static class IgnoreCaseIntegerMap extends HashMap {
>               public Object put(Object key, Object value) {
>                       return
>super.put(this.generateKey(key.toString()), value);
>               }
>
>               public Object get(Object key) {
>                       return
>super.get(this.generateKey(key.toString()));
>               }
>
>               private Object generateKey(String str) {
>
>                       int len = str.length();
>                       int h=0;
>                       char val[] = str.toCharArray();
>                       char c;
>                       for (int i = 0; i < len; i++) {
>                               c=val[i++];
>                               if(c>=97 && c <=122)
>                                       c-=32;
>
>                               h = 31*h + c;
>                       }
>                       return new Integer(h);
>               }
>       }
>
>       private static class IgnoreCaseBitMap extends HashMap {
>               public Object put(Object key, Object value) {
>                       return
>super.put(this.generateKey(key.toString()), value);
>               }
>
>               public Object get(Object key) {
>                       return
>super.get(this.generateKey(key.toString()));
>               }
>
>               private Object generateKey(String str) {
>                       int len = str.length();
>                       int h=0;
>                       char val[] = str.toCharArray();
>                       for (int i = 0; i < len; i++) {
>                               h = 31*h + (val[i++]&223);
>                       }
>                       return new Integer(h);
>               }
>       }
>
>}
>
>
>-----Original Message-----
>From: Navjot Singh [mailto:[EMAIL PROTECTED]
>Sent: Sábado, 14 de Febrero de 2004 03:16 a.m.
>To: Struts Users Mailing List; [EMAIL PROTECTED]
>Subject: RE: [OT] Case insensitive Map keys
>
>
>hi,
>
>seems like you are ready to go down to bits. my 2 cents for you to try
>
>==> convert string to array of bytes.
>
>1. AND every byte with 11011111. all will give you same output. OR 2.
>shift left the every byte by 3 bits.
>
>keep pushing the resulting byte to another array.
>create string again of those bytes.
>
>Saves you 2 relations operator, one condiiton checking, one
>subtraction-assign. object creation is same. you create Integer. I
>create String.
>
>please let us know if you gain some performance.
>
>
>>-----Original Message-----
>>From: Guillermo Meyer [mailto:[EMAIL PROTECTED]
>>Sent: Friday, February 13, 2004 7:08 PM
>>To: 'Struts Users Mailing List'
>>Subject: RE: [OT] Case insensitive Map keys
>>
>>
>>I'm trying the following:
>>
>>      public class KeyGeneratedMap extends HashMap {
>>              public Object put(Object key, Object value) {
>>                      return
>>super.put(this.generateKey(key.toString()), value);
>>              }
>>
>>              public Object get(Object key) {
>>                      return
>>super.get(this.generateKey(key.toString()));
>>              }
>>
>>              /**
>>              * This generates an integer object for Strings and are
>>case insensitive, that is
>>              * Hello and heLLO generate the same Integer object value
>>              */
>>              private Object generateKey(String str) {
>>                      int len = str.length();
>>                      int h=0;
>>                      char val[] = str.toCharArray();
>>                      char c;
>>                      for (int i = 0; i < len; i++) {
>>                              c=val[i++];
>>                              if(c>=97 && c <=122)
>>                                      c-=32;
>>
>>                              h = 31*h + c;
>>                      }
>>                      return new Integer(h);
>>              }
>>      }
>>
>>This by now is three times faster than using toUpperCase for storing
>>and retrievinig items from the hash. What do you think?
>>
>>-----Original Message-----
>>From: Navjot Singh [mailto:[EMAIL PROTECTED]
>>Sent: Viernes, 13 de Febrero de 2004 02:53 a.m.
>>To: Struts Users Mailing List
>>Subject: RE: [OT] Case insensitive Map keys
>>
>>
>>oops!! thanks for correcting me freddy.
>>
>>well in that case, if you map is not modified frequently, try the
>>FastHashMap from the Apache Commons. either you override and read and
>>write your own.
>>
>>>-----Original Message-----
>>>From: Villalba Arias, Fredy [BILBOMATICA]
>>>[mailto:[EMAIL PROTECTED]
>>>Sent: Thursday, February 12, 2004 5:50 PM
>>>To: Struts Users Mailing List
>>>Subject: RE: [OT] Case insensitive Map keys
>>>
>>>
>>>Navjot,
>>>
>>>I believe this is exactly what Guillermo CLEARLY stated he had already
>
>>>tried (and is not efficient enough for him).
>>>
>>>If you had taken a little bit longer and read carefully, then maybe
>>>you'd have noticed.
>>>
>>>Regards,
>>>Freddy.
>>>
>>>-----Mensaje original-----
>>>De: Navjot Singh [mailto:[EMAIL PROTECTED]
>>>Enviado el: jueves, 12 de febrero de 2004 13:14
>>>Para: Struts Users Mailing List; [EMAIL PROTECTED]
>>>Asunto: RE: [OT] Case insensitive Map keys
>>>
>>>yes. here it is.
>>>
>>>public CIMap extends HashMap
>>>{
>>>
>>>     public Object get(String key)
>>>     {
>>>             return super.get(key.toLowerCase());
>>>     }
>>>
>>>     public Object put(String key, Object value)
>>>     {
>>>             super.put(key.toLowerCase(),value);
>>>     }
>>>}
>>>
>>>This was simple implementation. By the time you ask the Q and wait for
>
>>>reply. you could have written on your own.
>>>
>>>Navjot Singh
>>>
>>>
>>>>-----Original Message-----
>>>>From: Guillermo Meyer [mailto:[EMAIL PROTECTED]
>>>>Sent: Thursday, February 12, 2004 5:24 PM
>>>>To: 'Struts Users Mailing List'
>>>>Subject: [OT] Case insensitive Map keys
>>>>
>>>>
>>>>Hi:
>>>>Does anyone know an implementation of Map where keys are String and
>>>>case insensitive? I want to do this:
>>>>
>>>>map.put("propertyName", "DATA");
>>>>
>>>>And then, I should be able to get the value like this: Object obj =
>>>>map.get("PROPERTYNAME");
>>>>
>>>>Or like this:
>>>>Object obj = map.get("propertyname"); //or whatever. case
>>>>insensitive.
>>>>
>>>>We tried using toUppercase when putting and toUppercase when getting,
>
>>>>and using equalsIgnoreCase but this is not as efficient as we need.
>>>>May there be a way to calculate a hash for strings in upper or lower
>>>>case to result in the same value?
>>>>
>>>>Thanks in advance.
>>>>
>>>>Guillermo.
>>>>
>>>>
>>>>NOTA DE CONFIDENCIALIDAD
>>>>Este mensaje (y sus anexos) es confidencial, esta dirigido
>>>>exclusivamente a las personas direccionadas en el mail y puede
>>>>contener informacion (i)de propiedad exclusiva de Interbanking S.A. o
>>>>(ii) amparada por el secreto profesional. Cualquier opinion en el
>>>>contenido, es exclusiva de su autor y no representa necesariamente la
>
>>>>opinion de Interbanking S.A. El acceso no autorizado, uso,
>>>>reproduccion, o divulgacion esta prohibido. Interbanking S.A no
>>>>asumira responsabilidad ni obligacion legal alguna por cualquier
>>>>informacion incorrecta o alterada contenida en este mensaje. Si usted
>
>>>>ha recibido este mensaje por error, le rogamos tenga la amabilidad de
>
>>>>destruirlo inmediatamente junto con todas las copias del mismo,
>>>>notificando al remitente. No debera utilizar, revelar, distribuir,
>>>>imprimir o copiar este mensaje ni ninguna de sus partes si usted no
>>>>es
>>
>>>>el destinatario. Muchas gracias.
>>>>
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>---
>>>Incoming mail is certified Virus Free.
>>>Checked by AVG anti-virus system (http://www.grisoft.com).
>>>Version: 6.0.459 / Virus Database: 258 - Release Date: 25/02/2003
>>>
>>>
>>>---
>>>Outgoing mail is certified Virus Free.
>>>Checked by AVG anti-virus system (http://www.grisoft.com).
>>>Version: 6.0.459 / Virus Database: 258 - Release Date: 25/02/2003
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>NOTA DE CONFIDENCIALIDAD
>>Este mensaje (y sus anexos) es confidencial, esta dirigido
>>exclusivamente a las personas direccionadas en el mail y puede contener
>
>>informacion (i)de propiedad exclusiva de Interbanking S.A. o (ii)
>>amparada por el secreto profesional. Cualquier opinion en el contenido,
>
>>es exclusiva de su autor y no representa necesariamente la opinion de
>>Interbanking S.A. El acceso no autorizado, uso, reproduccion, o
>>divulgacion esta prohibido. Interbanking S.A no asumira responsabilidad
>
>>ni obligacion legal alguna por cualquier informacion incorrecta o
>>alterada contenida en este mensaje. Si usted ha recibido este mensaje
>>por error, le rogamos tenga la amabilidad de destruirlo inmediatamente
>>junto con todas las copias del mismo, notificando al remitente. No
>>debera utilizar, revelar, distribuir, imprimir o copiar este mensaje ni
>>ninguna de sus partes si usted no es el destinatario. Muchas gracias.
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>NOTA DE CONFIDENCIALIDAD
>Este mensaje (y sus anexos) es confidencial, esta dirigido
>exclusivamente a las personas direccionadas en el mail y puede
>contener informacion (i)de propiedad exclusiva de Interbanking
>S.A. o (ii) amparada por el secreto profesional. Cualquier opinion
>en el contenido, es exclusiva de su autor y no representa
>necesariamente la opinion de Interbanking S.A. El acceso no
>autorizado, uso, reproduccion, o divulgacion esta prohibido.
>Interbanking S.A no asumira responsabilidad ni obligacion legal
>alguna por cualquier informacion incorrecta o alterada contenida
>en este mensaje. Si usted ha recibido este mensaje por error, le
>rogamos tenga la amabilidad de destruirlo inmediatamente junto con
>todas las copias del mismo, notificando al remitente. No debera
>utilizar, revelar, distribuir, imprimir o copiar este mensaje ni
>ninguna de sus partes si usted no es el destinatario. Muchas gracias.
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to