void main( ) {                            // ArrayList<T> es como std::vector<T> (https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/ArrayList.html)
   var a = new ArrayList<Integer>( );     // sin embargo, en Java el tipo T forzosamente debe ser una clase; la clase Integer tiene conversiones implícitas desde y hacia int (boxing y unboxing)
   a.add(5);                              // add es equivalente a push_back                         
   a.add(7); 
   a.add(4); 
   a.add(9); 
   a.add(3); 
 
   for (int i = 0; i < a.size( ); ++i) { 
      System.out.print(a.get(i));         // ¡no hay operator[]! una función para obtener el elemento
      System.out.print(" "); 
   } 
   System.out.print("\n"); 
 
   a.set(0, 10);                          // ¡no hay referencias al estilo C++! un función distinta para sobreescribir el elemento
                                          // en Java es común usar funciones get y set (y se suelen denominar getters y setters)
   for (int i = 0; i < a.size( ); ++i) { 
      System.out.print(a.get(i)); 
      System.out.print(" "); 
   } 
   System.out.print("\n"); 
   
   Integer x = 5;    // boxing (conversión de int a Integer que sí es class)
   int y = x;        // unboxing (conversión de Integer a int que es un tipo nativo)
}

/*
Tipo nativo | Clase con boxing/unboxing
---------------------------------------
boolean	   | Boolean
byte	      | Byte
char	      | Character
short	      | Short
int	      | Integer
long	      | Long
float	      | Float
double	   1 Double
*/
