Café y Código

1. El salto de «programador» a «ingeniero»

Antes de implementar listas o árboles a mano, necesitas el vocabulario de análisis de Java: tipos primitivos vs objetos, genéricos para reutilizar estructuras, y Big O para razonar sobre tiempo y memoria.

Tipos primitivos y wrappers (int vs Integer)

int, double, boolean… viven en la pila y no son objetos. Integer,Double, Boolean son clases envoltorio: encapsulan el valor y pueden sernull y usarse en colecciones genéricas que exigen referencias.

Primitivo vs wrapper
JAVA
1int a = 5;
2Integer b = Integer.valueOf(5); // preferible a new Integer(5)
3Integer c = null; // solo referencias permiten null
4
5// Autoboxing / unboxing
6Integer x = 10; // boxing
7int y = x; // unboxing — cuidado si x fuera null (NPE)

En estructuras propias, si el nodo guarda un dato genérico, casi siempre modelarás el contenido como tipo referencia (T) o usarás wrappers cuando necesites null como «hueco».

Genéricos (Generics)

Sin genéricos, todo sería Object y perderías seguridad de tipos. Con <T>, una misma claseNodo<T> sirve para String, Persona, etc.

Nodo genérico (idea central del curso)
JAVA
1public class Nodo<T> {
2 private final T dato;
3 private Nodo<T> siguiente;
4
5 public Nodo(T dato) {
6 this.dato = dato;
7 }
8 public T getDato() { return dato; }
9 public Nodo<T> getSiguiente() { return siguiente; }
10 public void setSiguiente(Nodo<T> siguiente) { this.siguiente = siguiente; }
11}

Complejidad algorítmica (Big O)

Medís tiempo y espacio en función del tamaño de la entrada n. No hace falta contar milisegundos: comparás órdenes de crecimiento.

NotaciónNombreEjemplo típico
O(1)ConstanteAcceso por índice en arreglo, peek en pila
O(log n)LogarítmicaBúsqueda en BST equilibrado, heap
O(n)LinealRecorrer lista enlazada, un solo bucle sobre n
O(n log n)Casi linealMerge sort, quick sort promedio
O(n²)CuadráticaBucles anidados sobre el mismo n (p. ej. burbuja ingenua)

Propuesta de práctica: para cada método que escribas (insertar, buscar), anotá en un comentario // tiempo: O(?), espacio: O(?) y justificá con un argumento corto.

Interfaces como contrato

Antes de codificar, definí qué operaciones expone tu estructura: void insertar(T x),T eliminar(), boolean contiene(T x), etc. Las interfaces en Java te obligan a pensar elqué antes del cómo — coherente con el rol de ingeniero.

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.