que - java swing tutorial pdf español
¿Por qué Java proporciona dos métodos para eliminar elementos de la cola? (7)
A veces desea que se devuelva un valor nulo para una cola vacía y otras veces desea que trate una cola vacía como un caso de excepción.
La implementación de la Queue
en Java tiene dos métodos para eliminar el elemento, Uno es remove()
que lanza una excepción y el otro es poll()
que devuelve un null
para una cola vacía. Tengo dos dudas:
- ¿Por qué la
Queue
tiene una implementación diferente para eliminar el elemento? - ¿Qué implementación usar cuando?
Cuando sepa cómo reaccionar en este momento y / o espere que falten elementos, utilice la encuesta.
De lo contrario utilice eliminar.
En algunas situaciones, se espera que la cola esté vacía, y en esos casos es apropiado tener un método que no arroje una excepción. En otras situaciones, es una circunstancia excepcional que la cola esté vacía, y una excepción es apropiada.
Las excepciones de lanzamiento incurren en una penalización de rendimiento, y en el caso de que espere que la cola esté vacía de vez en cuando, no quiere tener que manejar la lógica de cola vacía para detectar una excepción: es costoso y difícil leer.
En el caso contrario, en el que no se espera que la cola esté siempre vacía, es un signo de un error de programación, o alguna otra circunstancia excepcional, y no desea escribir el código de verificación de la condición de error feo (por ejemplo, verificación para nulo), porque en este caso sería menos legible que detectar una excepción (que puede hacer en otro ámbito).
La clase abstracta AbstractQueue<E>
implementa la Queue<E>
y define el método de eliminación.
Puedes echar un vistazo al código fuente:
public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
Entonces, como puede ver, el método remove()
usa el método poll()
.
Puedes usar el que prefieras.
Los dos métodos se utilizan de manera diferente en las discusiones clásicas sobre una estructura de cola. Uso poll () principalmente para recuperar elementos, y eliminar () principalmente si necesito modificar la Cola fuera del bucle normal.
Mirando las respuestas, no estaba claro para mí qué hizo qué, por lo tanto:
Directamente desde la API: los métodos remove () y poll () difieren solo en su comportamiento cuando la cola está vacía: el método remove () lanza una excepción, mientras que el método poll () devuelve un valor nulo
Remove()
método Remove()
difiere de la encuesta solo en que lanza una excepción si esta cola está vacía.