Te doy un posible enfoque para el problema:
Las clases a definir serían (algunas clases las podrías omitir si quieres):
Equipo: clase donde se define un equipo con sus atributos y métodos
ListaEquipos: clase con un atributo que es un ArrayList con una lista de equipos.
Emparejamiento: clase que tiene dos atributos que son los equipos de que consta un emparejamiento. Si el segundo equipo es null significará que es el último equipo (caso de número impar, equipo que queda sin pareja)
ListaEmparejamientos: clase que tiene un atributo que es un ArrayList de Emparejamientos.
Emparejador: clase que recibe un ArrayList de objetos Equipo, es decir, una ListaEquipos, y se encarga de crear los emparejamientos y devolver un ArrayList de objetos Emparejamiento.
Programa: clase con el método main, donde se crean y definen los objetos Equipo y se añaden a un objeto ListaEquipos y donde se crea un objeto Emparejador que se encarga de recibir la lista de equipos y devolver la lista de emparejamientos.
Todo esto siguiendo los criterios de programación orientada a objetos expuestos en el curso
http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188También se puede resolver de otras maneras, por ejemplo como dices tú con arrays o con otros diseños de orientación a objetos.
Saludos,