Быстрая итерация по каждому элементу в списке (порядок не имеет значения)
Если порядок не имеет значения, вы должны перейти к реализации Collection
с временной сложностьюO(n)
, поскольку каждый из них реализует Iterable
, и если вы хотите выполнить итерацию по каждому элементу, вы должны посетить каждый элемент хотя бы один раз (следовательно, нет ничего лучше, чем O(n)
).Практически, конечно, одна реализация более подходит по сравнению с другой, так как чаще вам приходится принимать во внимание множество факторов.
Проверьте, содержит ли список (а) определенный элемент (ы)
Как правило, это пользовательский случай для Set
, у вас будет намного лучшая сложность временидля contains
операций.Здесь следует отметить, что Set
не имеет предопределенного порядка при итерации по элементам.Он может меняться между реализациями, и рискованно делать предположения об этом.
Теперь к вашему вопросу:
С моей точки зрения, если у вас есть выбор, выбратьСтруктура данных класса самостоятельно, выберите наиболее естественную для этого варианта использования.Если вы можете себе представить, что вам нужно много звонить contains
, тогда Set
может подойти для вашего случая использования.Вы также можете использовать List
, и каждый раз, когда вам нужно позвонить contains
(несколько раз), вы можете создать Set
со всеми элементами из List
ранее.Конечно, если вы будете часто вызывать этот метод, было бы дорого , чтобы создать Set
для каждого вызова.Вы можете использовать Set
в первую очередь.
В вашем комментарии указано, что у вас есть мир игроков, и вы хотите проверить, является ли игрок частью определенного объекта мира.Так как мир владеет игроками, он также должен содержать Collection
некоторого вида для их хранения.Теперь в этом случае я бы порекомендовал Map
с общим идентификатором игрока в качестве ключа и самого игрока в качестве значения.
public class World {
private Map<String, Player> players = new HashMap<>();
public Collection<Player> getPlayers() { ... }
public Optional<Player> getPlayer(String nickname) { ... }
// ...
}