I tenían tries diferentes combinaciones para la comparación de cadenas (code here):
1. s1.equals(s2)
2. s1.length() == s2.length() && s1.hashCode() == s2.hashCode() && s1.equals(s2)
3. s1.hashCode() == s2.hashCode() && s1.equals(s2);
4. s1.length() == s2.length() && s1.equals(s2);
que solía cadenas de longitud 40 caracteres, en 10000000000L iteraciones y antes de cualquier iteración I reinicializa las cuerdas.
por la igualdad de las picaduras que tengo:
equal: 2873 milis ???
equal: 21386 milis
equal: 7181 milis
equal: 2710 milis ???
para mismas cadenas de tamaño, pero la última con caracteres diferentes que tengo:
different: 3011 milis
different: 23415 milis
different: 6924 milis
different: 2791 milis
de diferentes tamaños, casi mismas cadenas, pero con un carácter añadido al final de S2:
different size: 3167 milis
different size: 5188 milis
different size: 6902 milis
different size: 2951 milis
me parece que lo mejor es utilizar una primera STRI ng.length() comparación antes de igual().
Pero esto no importará casi en absoluto porque este es el caso donde tengo 10^10 comparaciones de cuerdas con 40 caracteres de longitud y lo que es extraño para mí es el caso donde para cadenas iguales tengo una mejor velocidad cuando compare la longitud de la cuerda primero.
¿Por qué 'igual()' sería lento para usted? – BoltClock
¿Ha perfilado su aplicación, y fue la conclusión de que el punto de acceso en su código fue causado por 'String.equals (...)'? Si no ha perfilado su aplicación, ¿por qué cree que 'String.equals (...)' es (o podría ser) un problema? –
Su pregunta no indica que igual es lento. Me pregunto si hay algo más rápido que equals(). – Sagar