Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

372
Vistas
¿Por qué este código usa una matriz de gran tamaño en lugar de un mapa?

Aquí está la implementación de JBoss JSTL para la etiqueta EscapeXML

 public class EscapeXML { private static final String[] ESCAPES; static { int size = '>' + 1; // '>' is the largest escaped value ESCAPES = new String[size]; ESCAPES['<'] = "&lt;"; ESCAPES['>'] = "&gt;"; ESCAPES['&'] = "&amp;"; ESCAPES['\''] = "&#039;"; ESCAPES['"'] = "&#034;"; } //omitted }

¿Por qué ESCAPES es una matriz de 61 elementos? ¿Cuáles son las implicaciones de usar Map<Character,String> en su lugar?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Creo que la razón principal es el rendimiento. Cada consulta de mapa necesita obtener el código hash y luego calcular la posición de la matriz en el mapa, y la matriz se puede obtener directamente. La siguiente es una prueba simple, consultando 10,000 veces por separado, la matriz es aproximadamente 10 veces más rápida que el mapa.

 array query result: cost time= 184041 map query result: cost time= 1677042
 import org.junit.Before; import org.junit.Test; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Random; /** * @author jahe * @date 2022/1/9 * @note */ public class ArrayMapTest { private char[] chars = {'<', '>', '&', '\'', '"'}; private char[] charsForQuery = new char[10000]; @Before public void init(){ Random random = new Random(5); random.nextInt(5); for (int i = 0; i < charsForQuery.length; i++) { charsForQuery[i] = chars[random.nextInt(5)]; } System.out.println(Arrays.toString(charsForQuery)); } @Test public void test() { int size = '>' + 1; String[] ESCAPES = new String[size]; ESCAPES['<'] = "&lt;"; ESCAPES['>'] = "&gt;"; ESCAPES['&'] = "&amp;"; ESCAPES['\''] = "&#039;"; ESCAPES['"'] = "&#034;"; long start = System.nanoTime(); doTestForArray(ESCAPES); long end = System.nanoTime(); System.out.println("array query result: cost time= " + (end - start)); Map<Character, String> map = new HashMap<>(); map.put('<', "&lt;"); map.put('>', "&gt;"); map.put('&', "&amp;"); map.put('\'', "&#039;"); map.put('"', "&#034;"); start = System.nanoTime(); doTestForMap(map); end = System.nanoTime(); System.out.println("map query result: cost time= " + (end - start)); } private void doTestForArray(String[] ESCAPES){ for (char c : charsForQuery) { String str = ESCAPES[c]; } } private void doTestForMap(Map<Character, String> map){ for (char c : charsForQuery) { String s = map.get(c); } } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda