class ArregloDinamico { 
   private int cap, tam; 
   private int[] p; 
 
   public ArregloDinamico( ) { 
      cap = 1; 
      tam = 0; 
      p = new int[1]; 
   } 
 
   public ArregloDinamico(int t, int v) { 
      cap = t; 
      tam = t; 
      p = new int[cap]; 
      for (int i = 0; i < tam; ++i) { 
         p[i] = v; 
      } 
   } 
 
   public ArregloDinamico(ArregloDinamico v) {
      cap = v.tam;
      tam = v.tam;
      p = new int[cap];
      for (int i = 0; i < tam; ++i) {
         p[i] = v.p[i];
      }
   }
 
   public ArregloDinamico(int[] lista) { 
      cap = 1; 
      tam = 0; 
      p = new int[1]; 
      for (int v : lista) { 
         agrega(v); 
      } 
   } 
 
   public int size( ) { 
      return tam; 
   } 
 
   public int get(int i) { 
      return p[i]; 
   } 
 
   public void set(int i, int v) { 
      p[i] = v; 
   } 
 
   public void agrega(int v) { 
      if (tam == cap) { 
         int[] q = new int[2 * cap]; 
         for (int i = 0; i < tam; ++i) { 
            q[i] = p[i]; 
         } 
         p = q; 
         cap *= 2; 
      } 
 
      p[tam] = v; 
      tam += 1; 
   } 
 
   public void quita_ultimo( ) { 
      tam -= 1; 
   } 
} 
 
class Main { 
   void imprime(ArregloDinamico a) { 
      for (int i = 0; i < a.size( ); ++i) { 
         System.out.printf("%d ", a.get(i)); 
      } 
      System.out.println( ); 
   } 
 
   void main( ) { 
      var a = new ArregloDinamico(new int[]{ 10, 5, 2 });      // también funciona List.of(10, 5, 2) que es algo del paquete java.util
      a.agrega(8); 
      a.agrega(7); 
      a.set(0, 3); 
      imprime(a); 
   } 
} 
