¿Cómo codificaría un búfer circular eficiente en Java o C #

Quiero una clase simple que implemente un búfer circular de tamaño fijo. Debe ser eficiente, agradable a la vista, de tipo genérico.

EDIT: no es necesario que sea MT, por ahora. Siempre puedo agregar un bloqueo más tarde, en cualquier caso no será de alta concurrencia.

Methods debería ser: .Add y supongo .List, donde recupero todas las entradas. Pensándolo bien, creo que la recuperación debería hacerse a través de un indexador. En cualquier momento querré poder recuperar cualquier elemento en el búfer por índice. Pero tenga en cuenta que de un momento a otro el elemento [n] puede ser diferente, ya que el búfer circular se llena y rueda.

Esto no es una pila, es un búfer circular. Con respecto al "desbordamiento": esperaría internamente que hubiera una matriz que contenga los elementos, y con el tiempo la cabeza y la cola del búfer rotarán alrededor de esa matriz fija. Pero eso debería ser invisible para el usuario. No debe haber ningún evento o comportamiento de "desbordamiento" detectable externamente.

Esta no es una tarea escolar: se usará más comúnmente para un caché MRU o una transacción de tamaño fijo o registro de eventos.

Respuestas a la pregunta(13)

Su respuesta a la pregunta