En cuanto a ArrayList's spec No veo ningún método que proporcione esta información.
Dicho esto, el método ensureCapacity parece como un paso en la dirección correcta (precaución: es no garantiza una respuesta correcta): Cuando lo llamó asegura que la capacidad es de al menos el argumento especificado. Entonces, si la implementación ArrayList
usa este método para asegurar la capacidad (en lugar de llamar a algún método privado/manipular directamente los campos relevantes) puede obtener la capacidad actual anulando este método. También debe sobrescribir trimToSize()
de manera similar.
Por supuesto, esta solución no es muy portátil como una implementación diferente de ArrayList
(en una JVM de otro proveedor) puede hacer las cosas de manera diferente.
Así es como el código debe ser similar
public class CapacityTrackingArrayList<T> extends ArrayList<T> {
// declare a constructor for each ArrayList constructor ...
// Now, capacity tracking stuff:
private int currentCapacity = 10;
public int getCapacity() { return currentCapacity; }
public void ensureCapacity(int arg) {
currentCapacity = arg;
super.ensureCapacity(arg);
}
public void trimToSize() { currentCapacity = size(); super.trimToSize(); }
}
¿Por qué necesita esta información? –
Corteza ... Nada específico ... Lo tuve en una entrevista – JavaUser
Google me llevó hasta aquí. La razón por la que necesito esta información: tengo una ArrayBlockingQueue que me permite tomar, procesar y almacenar resultados en otra Colección. Pensé que sería bueno usar una capacidad inicial para la Colección de resultados que coincida con la capacidad del ABQ. No es un caso de uso tan extraño, ¿no? Hay otras formas de evitarlo (por ejemplo, almacenar la capacidad como una final estática y hacer referencia a eso), pero no necesariamente en todos los casos. – ericsoco