你更倾向哪个?
我想在java中制作一个有限自动机;使用向量或集合更有效吗?
Vector 是一个类。Set 是一个接口。如果您不做需要线程安全的事情,我无论如何都会使用 ArrayList 而不是 Vector。或者一个标准数组,如果它不会被调整大小。
不过,这实际上取决于您的应用程序。具体来说,Sets 不允许重复元素,而 Arrays (Arraylists, Vectors) 允许。
我个人会使用数组,除非它需要具有某种特殊功能(调整大小、没有重复元素等)
AVector
和 aSet
是两种不同的数据结构;它们不能出于相同目的互换。
Vector
包含按定义顺序的元素,并且可以包含重复项(它是一个列表)。Set
没有固有的顺序并且不能包含重复项(它是一个袋子,其中的元素没有排序)。Which you should use totally depends on how you design and implement your application; without knowing how you did that, it's not possible to say whether you should use a Vector
or a Set
.
Note: class java.util.Vector
is a legacy collection class, you should really use java.util.ArrayList
instead.
集合在插入和删除方面效率更高,而向量执行这些操作的速度较慢。但是,您不能像在向量中那样将元素存储在您选择的索引处。
查找在向量中是最快的,而在集合中它们可能会慢一点。
如果您的数据是恒定的,则应该使用向量。如果你会经常改变,你应该去一套。
我宁愿使用列表实现而不是向量。该向量是线程安全的,但因此会带来一些开销。List 不是线程安全的,但您始终可以同步每次调用以添加、删除和获取元素。
如果你试图让你的元素以特定的顺序排列,那么这个集合会有一些奇怪的行为,就像 casablanca 所说的那样。此外,该集合将照此执行,并且绝不允许您在需要时重复元素。
两者都用于不同类型的活动:向量和列表都用于相同的任务,实现不同。当您需要它像一个集合一样工作时,该集合仅适用于这种情况。
我认为 Set 更适用于实现有限自动机。例如,您应该使用 Set 来保证没有重复的元素。根据自动机定义,您有一组状态、一组符号和一组可接受的状态,因此 Set 可以满足您的要求。