code - Colas de Java: ¿por qué "sondeo" y "oferta"?
methods naming convention java (4)
Estás confundiendo la cola con la pila; push y pop están asociados con este último.
Piense en la cola en su contexto adecuado de productor / consumidor; Encuesta y oferta tendrán mucho más sentido.
Bien, he estado usando Java por mucho tiempo y recientemente me he estado preparando para mi examen OCJP. Me preguntaba si alguien podría proporcionar alguna información sobre por qué se eligieron los nombres de los métodos "encuesta" (a diferencia del "pop" más tradicional) y la "oferta" (a diferencia del "impulso" más tradicional). Estoy buscando específicamente en la interfaz java.util.Queue, pero también estaría interesado en explicaciones más generales :)
Esta es realmente una pregunta más académica que para cualquier escenario de codificación específico, ya que solo estoy tratando de entender por qué Sun (como se hizo antes de que Oracle los comprara) elegiría los nombres que eligió.
Ah, y antes de que alguien decida crucificarme o devolver los enlaces a lmgtfy ... Ya he buscado en google, yahoo, wiki, bing y SO, así que si estoy pasando por alto algunos criterios de búsqueda obvios o me he perdido algún post anterior aquí. Explica que luego me disculpo de antemano.
La interfaz de la cola define algunos métodos para actuar sobre el primer elemento de la lista, que difieren en la forma en que se comportan. Estos métodos son:
peek()
element()
poll()
remove()
El peek () Este método recupera el valor del primer elemento de la cola sin eliminarlo de la cola. Para cada invocación del método siempre obtenemos el mismo valor y su ejecución no afecta el tamaño de la cola. Si la cola está vacía, el método peek () devuelve nulo .
El elemento () Este método se comporta como peek (), por lo que nuevamente recupera el valor del primer elemento sin eliminarlo. sin embargo, si la lista está vacía element () lanza una excepción NoSuchElementException .
La encuesta () Este método recupera el valor del primer elemento de la cola al eliminarlo de la cola. . En cada invocación, elimina el primer elemento de la lista y, si la lista ya está vacía, devuelve un valor nulo pero no produce ninguna excepción .
El método remove () Este método se comporta como el método poll (), por lo que elimina el primer elemento de la lista y, si la lista está vacía, genera una excepción NoSuchElementException.
Supongo que es simplemente porque los nombres push
y pop
suenan ambiguos entre el comportamiento de add
y remove
y el de offer
y poll
, y pop
, en particular, es una reminiscencia de java.util.Stack.pop()
, que se comporta como remove
lugar de que como poll
. Los nombres de add
y remove
fueron obviamente elegidos para que coincidan con los nombres de métodos similares en otras partes del Java Collections Framework, que realizan la operación solicitada o generan una excepción; Los nombres de la offer
y la poll
sugieren que no generan excepciones.
Debido a que estos métodos tienen diferentes semánticas explicadas en el JavaDoc . los valores de add
/ remove
son incondicionales, mientras que la offer
/ poll
devuelve un valor especial :
offer
solo ofrece un nuevo valor, pero es posible que no se acepte, por ejemplo, si la cola está llenapoll
solo sondeos para el valor, pero aceptamos el hecho de que el valor podría no estar allí.
Para complicar más las cosas, BlockingQueue
introduce otro par de métodos para bloquear add
/ remove
. Por supuesto, podrían haber usado el mismo nombre con un montón de parámetros / banderas,
smellyGet(boolean blocking, boolean failOnEmpty)
¿Pero no crees que este es un mejor diseño?
| Throws ex. | Special v. | Blocks | Times out
--------+------------+------------+--------+---------------------
Insert | add(e) | offer(e) | put(e) | offer(e, time, unit)
Remove | remove() | poll() | take() | poll(time, unit)
Examine | element() | peek() | N/A | N/A