Vi sembra implementata bene questa classe?

In un metodo main, utilizzando questa classe e facendo un inserimento mi va fuori dall'array, la classe vi sembra ben fatta?

Si tratta di una classe Insieme che č un array, e all'interno posso inserire, togliere elementi di tipo Giocatori, e ho un metodo che mi restituisce l'indice in cui si trova il giocatore con il punteggio pił alto.

codice:
class Insieme{

	Giocatori[] insieme;
	int lunghezza;
	Giocatori element;
	
	public Insieme(int lungezza){
		insieme=new Giocatori[lunghezza];
		this.lunghezza=lunghezza;
		element=null;
	}
	
	public void add(Giocatori g){
		int i=0;
		
		while(insieme[i]!=null)      //ho un arrayIndexOutOfBounds in questo controllo
			i++;
		insieme[i]=g;
	}
	   	
	public Giocatori remove(int index){
		int i=0;
		Giocatori tmp=null;
		while(i!=index)
			i++;
		
		if(i==lunghezza-1)
		{
			tmp=insieme[i];
			insieme[lunghezza-1]=null;
			return tmp;
		}
		
		else{
			    tmp=insieme[i];
			
				for(int j=i+1; j<lunghezza; j++)
				{
					insieme[i]=insieme[j];
					i++;
				}
			
			   insieme[i]=null;
			}
			
		return tmp;
	}
	
	public int getMax(){
		int max=insieme[0].p;
		int index=0;
		
		for(int i=0; insieme[i]!=null; i++)
		{
			if(max<insieme[i].p){
				max=insieme[i].p;
				index=i;
			}
		}
		
	return index;
	}
}