Ridondante quanto inutile.
Elimina l'array, non ti serve a nulla.
Usa solo l'ArrayList, ma tipizzalo correttamente, non come Object (contiene oggetti Cdmusica? Sarà un ArrayList<Cdmusica>).
Nel ciclo for, invece di creare i Pattern prendendo i valori dall'array (che non avrai più), prendili dall'arraylist.
Ho provato il tuo codice, riempiendo l'arraylist con due CD, quello di Vasco e quello di Mina.
Ho fatto la ricerca con "Vasco", "1993" e mi ha tirato fuori uno ed un solo valore, quindi, per quanto arzigogolato, quel codice funziona.
codice:
ArrayList<Cdmusica> cd2= new ArrayList<Cdmusica>();
cd2.add( new Cdmusica( "The Fame monster","VV", "sony", "1993",1) );
cd2.add( new Cdmusica( "Track 2 inediti","VV", "REI","1993",2) );
...
Ciao.