Certo che in quanto a esposizione... dovresti essere tu ad avere le idee chiare su quello che devi fare...

devo implementare un Insieme come array di interi con dimensioni massime limitate solo dalla memoria disponibile
Cosa significa? una cella del vettore per ogni MB di memoria libera? Comunque qui si intuisce che parli di un array con una dimensione variabile e legata alla ram disponibile.

quindi nel costruttore quando dichiaro il mio array come faccio a farlo dinamico cioe in base alla memoria disponibile?
Qui invece ti perdi completamente: non basta il costruttore.

Devi creare una tua struttura dati che "simuli" un vettore dinamico senza utilizzare le strutture dati fornite dalle API. Ci sono diversi modi per farlo, io te ne indico due:

- una catena di nodi (linked list)
- attraverso un vettore statico che viene sostituito con un vettore statico più grande quando a furia di inserimenti diventa pieni.

Diciamo che vuoi realizzare la seconda struttura dati... Ti occorre un oggetto che abbia:
- un contatore del numero di elementi inseriti
- un vettore statico, sempre grande abbastanza da contenere tutti gli elementi inseriti

Nel costruttore puoi indicare la dimensione iniziale del vettore. Ma per rendere dinamica questa cosa ti occorrono altri metodi:
- get (i), che restituisce l'elemento alla posizione i
- set (i, ?), che inserisce ? nella posizione i del vettore
- size(), che restituisce il numero di elementi inseriti
- resize(), un metodo che sostituisce il vettore statico attuale con un nuovo vettore statico più grande in cui viene copiato tutto il contenuto del vecchio vettore.

la cosa importante è che il metodo set deve controllare che il numero di elementi già inseriti (dimensione del vettore dinamico) non sia superiore alla capacità del vettore statico. Se non è così va invocato il metodo resize.

In genere è un buon criterio quello di raddoppiare ad ogni resize quello la capacità del vettore dinamico, cioè di creare un nuovo vettore statico di capacità doppia rispetto alla capacità del vecchio vettore.

In quanto all'uso della classe RunTime, mi pare di avertela già suggerita e credo sia anche l'unico modo che hai per conoscere la memoria libera.