Dies sind Designentscheidungen, und eine Größe passt normalerweise nicht für alle. Auch die Auswahl dessen, was intern für die Elementvariable verwendet wird, kann (und sollte normalerweise) von dem abweichen, was der Außenwelt ausgesetzt ist.
Im Kern bietet das Collections-Framework von Java keine vollständigen Schnittstellen, die die Eigenschaften beschreiben, ohne die Implementierungsdetails offenzulegen. Die eine Schnittstelle, die die Leistung beschreibt, RandomAccess
, ist eine Markierungsschnittstelle und erweitert nicht einmal Collection
oder stellt die get(index)
-API erneut offen. Also ich denke nicht, dass es eine gute Antwort gibt.
Als Faustregel halte ich den Typ so unspezifisch wie möglich, bis ich ein wichtiges Merkmal erkenne (und dokumentiere). Wenn ich beispielsweise möchte, dass Methoden wissen, dass der Anzeigenauftrag beibehalten wird, würde ich von Collection
zu List
wechseln und dokumentieren, warum diese Einschränkung wichtig ist. In ähnlicher Weise bewegen Sie sich von List
zu LinkedList
, wenn eine effiziente Entfernung von vorne wichtig wird.
Wenn es darum geht, die Sammlung in öffentlichen APIs offenzulegen, versuche ich immer, nur die wenigen APIs zu veröffentlichen, von denen erwartet wird, dass sie verwendet werden; zum Beispiel add(...)
und iterator()
.
Sammlung ist eine Schnittstelle, die von LinkedList implementiert wird. Sie sollten immer mit einer Schnittstelle auf die Implementierung verweisen. – emd