Also generell wirst Du es oft so haben, dass du mehrere Möglichkeiten hast, wie du die Daten verwaltest. Was dann besser ist, hängt dann meist von den genauen Anforderungen ab.
Im konkreten Fall ist die Frage, was Du brauchst. Das eine ist eine List und das andere ist ein Set. Eine Liste hat z.B. eine Reihenfolge. Das hat eine Set nicht. Dementsprechend gibt es Unterschiede wie z.B. mehrere gleiche Elemente.
Natürlich kannst Du so Dinge wie Reihenfolge und nur jedes Element einmal über Board schmeissen. Dann könntest Du eine List statt eines Sets verwenden.
ABER: Die Set kann optimierter auf die Daten zugreifen. So können die Daten beliebig gespeichert werden (Reihenfolge ist ja egal) und damit kann so optimiert werden, dass Such-Zugriffe schneller sind.
Also ist alles eine Frage der Notwendigkeiten. Eine List hat z.B. den Vorteil, dass man ganz schnell Einfügen kann. Das sollte eine Operation von O(1) sein. Bei einem Set finden Optimierungen statt, so dass ein Einfügen meist O(log(n)) sein sollte. Wenn Du also jetzt eine Applikatioin hast, bei der Du sehr schnell sehr viele Daten einfügen musst, dann könnte eine List besser sein als ein Set.
Die Lesezugriffe sind dafür aber anders. Bei einer List ist hier O(n) notwendig, so ein beliebiges Element gesucht werden soll. (Zugriffe auf die Enden sind dafür aber O(1)!). Und bei einem Set hat man dank der Optimierungen ein O(log(n)).
Es gibt also durchaus sehr viele Unterschiede. Aber das Ganze ist relativ egal. Man kann erst einmal eine Implementation verwenden. So man alles sauber gekapselt hat kannst Du dann später relativ schnell hingehen und die Implementation in der Klasse austauschen. (Das zeigt auch, wie wichtig eine saubere Kapselung ist!)
Ein Link, der die Unterschiede tiefer beleuchtet ist z.B.
http://java67.blogspot.de/2012/07/difference-between-arraylist-hashset-in-java.html
Und noch ganz wichtig: Die Laufzeitverhalten sind von typischen "Listen" und "Sets" abgeleitet. Es spricht natürlich nichts dagegen, eine ArrayList zu schreiben, die intern die Daten anders vorhält. So ist denkbar, dass man eine "List Implementation" hat, die Zugriffe auf beliebige Elemente auch in O(log(n)) durchführt und dafür ein Einfügen ebenfalls in O(log(n)) macht und somit vergleichbares Verhalten zeigt wie ein Set. Daher sind diese Aussagen immer sehr differenziert zu sehen und nicht als "in Stein gemeißelt". Ebenso kann ich eine List schreiben, die O(e^n) als Laufzeitverhalten hat (Keine Ahnung, wie ich das hinkriege, aber irgendwie kriege ich schon hin, für jedes Element mehr eine weitere Schleife zu bauen. Mehr Zeit zu verballern ist immer einfacher als etwas zu optimieren
)
Konrad