Se leggi il codice forse te ne accorgi, ho messo anche un commento
codice:
//Ritorna l'indice dell'oggetto contenuto, -1 se non presente
int indexOf = lista.indexOf(p);
Perchè reinventare l'acqua calda, o meglio perchè rischiare di scrivere codice se qualcuno ha già provveduto a scriverlo per te e lo ha anche testato !!!
Cmq, consiglio spassionato da un occhio a questo Link.
Per l'eccezione se la posti forse possiamo darti una mano, altrimenti pace....