Parece que tanto primera() y la última() será O (log n) y no O (1) basado en implementació (Sun JDK 1.6.0_23) de TreeMap que es utilizado por TreeSet por defecto:
/**
* Returns the first Entry in the TreeMap (according to the TreeMap's
* key-sort function). Returns null if the TreeMap is empty.
*/
final Entry<K,V> getFirstEntry() {
Entry<K,V> p = root;
if (p != null)
while (p.left != null)
p = p.left;
return p;
}
/**
* Returns the last Entry in the TreeMap (according to the TreeMap's
* key-sort function). Returns null if the TreeMap is empty.
*/
final Entry<K,V> getLastEntry() {
Entry<K,V> p = root;
if (p != null)
while (p.right != null)
p = p.right;
return p;
}
Miré el código fuente pero es demasiado abstracto. No estoy seguro de dónde se implementan el primero y el último. Tengo que buscar más. – signalseeker
TreeSet se implementa internamente con un TreeMap, por lo que la mayor parte de la lógica está en 'TreeMap.get [First | Last | Lower | Higher] Entry()'. Todos atraviesan el árbol para encontrar los nodos, de modo que Stephen C es correcto, O (log N). – SimonC