¿El ArrayList de contains () método de trabajo más rápido si se ordena la ArrayList?

Guillermo Mosse:

Sospecho que no lo hace. Si quiero usar el hecho de que la lista se ordena, debo aplicar mi propio contains()método, mediante la búsqueda binaria, por ejemplo? ¿Existen métodos que suponen que la lista se ordena?

Esta cuestión es diferente a la posible duplicado porque la otra pregunta no pregunta sobre el contains()método.

Stephen C:

¿El ArrayList de contains () método de trabajo más rápido si se ordena la ArrayList?

No lo hace. La puesta en práctica de ArrayListno sabe si la lista se ordena o no. Ya que no sabe, no puede Optimizar en el caso cuando se ordena. (Y un examen del código fuente lo confirma.)

Podría una lista basada en matrices (hipotética) aplicación know? Creo que "No" en las siguientes razones:

  1. Sin incluir ni una Comparatorni el requisito de que los elementos implementan Comparable, el concepto de ordenación está mal definida.

  2. El costo de la comprobación de que la lista se ordena es O(N). El costo incremental de comprobar que la lista está siendo ordenado es O(1)... pero aún así una o dos llamadas a comparela disponibilidad para cada operación de actualización. Esa es una sobrecarga significativa ... de una estructura de datos de uso general para incurrir en la esperanza de optimización (justo) una operación en la API.

Pero eso esta bien. Si usted (el programador) es capaz de garantizar (a ser posible por medio de algoritmos eficientes) que una lista siempre se ordena, entonces usted puede utilizar Collections.binarySearch... con ninguna perdida de comprobación adicional en las operaciones de actualización.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=223590&siteId=1
Recomendado
Clasificación