вектор против набора в Java - PullRequest
0 голосов
/ 03 июля 2010

какой из них вы предпочитаете?

Я хочу сделать конечный автомат в Java; это более эффективно, используя вектор или набор?

Ответы [ 5 ]

3 голосов
/ 03 июля 2010

Вектор - это класс.Набор - это интерфейс.В любом случае я бы использовал ArrayList вместо Vector, если вы не делаете что-то, что должно быть потокобезопасным.Или стандартный массив, если размер не будет изменен.

Хотя это действительно зависит от вашего приложения.В частности, наборы не допускают дублирования элементов, в то время как массивы (Arraylists, Vectors) делают это.

Лично я бы использовал массив, если бы он не нуждался в какой-то специальной функции (изменение размера, отсутствие дублирующих элементов и т. Д.)..)

1 голос
/ 03 июля 2010

A Vector и Set - две разные структуры данных; они не взаимозаменяемы для одной и той же цели.

  • A Vector содержит элементы в определенном порядке и может содержать дубликаты (это список).
  • A Set не имеет внутреннего порядка и не может содержать дубликаты (это сумка, в которой элементы не упорядочены).

То, что вы должны использовать, полностью зависит от того, как вы разрабатываете и реализуете свое приложение; не зная, как вы это сделали, невозможно сказать, следует ли вам использовать Vector или Set.

Примечание: класс java.util.Vector - это унаследованный класс коллекции, вместо него вы должны использовать java.util.ArrayList.

0 голосов
/ 03 июля 2010

Я думаю, что набор больше применяется для реализации конечных автоматов. Например, вы должны использовать Set, чтобы гарантировать отсутствие дублирующихся элементов. По определению автоматов у вас есть набор состояний, набор символов и набор принятых состояний, поэтому набор может соответствовать вашим требованиям.

0 голосов
/ 03 июля 2010

Я бы предпочел использовать реализацию списка вместо вектора.Вектор является потокобезопасным, но из-за этого он несет некоторые накладные расходы.Список не является потокобезопасным, но вы всегда можете синхронизировать каждый вызов для добавления, удаления и получения элементов.

Набор будет иметь странное поведение, как сказал Касабланка, если вы пытаетесь получить свои элементы в определенномпорядок.Кроме того, набор будет действовать как таковой и никогда не позволит вам повторять элементы в случае необходимости.

Оба предназначены для разных видов действий: векторы и списки предназначены для одних и тех же задач, реализованы по-разному.Набор будет только для тех случаев, когда вам нужно, чтобы он функционировал как набор.

0 голосов
/ 03 июля 2010

Набор более эффективен при вставках и удалениях, в то время как вектор делает это медленнее.Тем не менее, вы не можете хранить элементы с индексами по вашему выбору, как вы можете в векторе.

Поиски быстрее в векторе, хотя они могут быть немного медленнее в наборах.

Если вашданные постоянны, вы должны идти с вектором.Если у вас будут частые изменения, вы должны пойти с набором.

...