2010-07-03 66 views
-4

你更喜欢哪一个?矢量vs设置在java

我想在java中制作一个有限自动机;使用向量还是集合更高效?

+2

适合* what *?你打算如何使用自动机内的集合? – 2010-07-03 01:29:17

+0

对于有意义的答案,此问题太含糊。 – 2010-07-03 03:38:02

回答

3

Vector是一个类。一个Set是一个接口。无论如何,如果你没有做一些需要线程安全的东西,我会使用ArrayList而不是Vector。或者一个标准数组,如果它不会被调整大小。

它确实取决于你的应用程序。具体来说,集合不允许重复的元素,而阵列(Arraylists,Vectors)。

个人而言,我会用一个阵列,除非它需要有某种特殊的功能(缩放,没有重复的元素等)

+1

除了优先于ArrayList的数组以外,我们同意。 – 2010-07-03 01:39:22

+0

我使用矢量,因为我不知道过渡的大小。这取决于用户的输入。所以它会更有效率,如果我使用矢量。我不需要确定数组的大小。 。 。 CMIIW – gin 2010-07-05 01:52:52

0

一组在插入和删除时效率更高,而矢量则更慢。但是,您无法像在矢量中那样将元素存储在您选择的索引处。

查找矢量中速度最快,而它们可以稍微慢一些。

如果你的数据是不变的,你应该使用矢量。如果你经常变化,你应该去一套。

+5

更有效地做*什么*? – 2010-07-03 01:31:51

+0

TreeSet按元素的自然顺序排列。 – 2010-07-03 01:38:34

+0

我的不好,我澄清了我的意思。 – casablanca 2010-07-03 01:52:16

0

我宁愿用列表实现的,而不是一个向量。这个向量是线程安全的,但是由于这个原因会带来一些开销。列表不是线程安全的,但您始终可以同步每个调用以添加,删除和获取元素。

如卡萨布兰卡所说,如果您试图以特定顺序获取您的元素,该设置将会有一些奇怪的行为。此外,该集合将会如此行事,并且决不会让您在需要时重复元素。

两者都适用于不同类型的活动:向量和列表都是针对相同的任务,实现不同。该设置将只适用于这种情况,当你需要它像一套功能。

0

我认为Set更适用于实现有限自动机。例如,你应该使用Set来保证没有重复的元素。通过自动机定义,你有一组状态,一组符号和一组可接受的状态,所以一组可以适合你的要求。

1

A VectorSet是两种不同的数据结构;它们不能为了同一目的而互换。

  • A Vector包含定义顺序的元素并且可以包含重复项(它是一个列表)。
  • A Set没有固有的顺序,也不能包含重复项(它是一个包,其中元素没有排序)。

你应该完全依赖于你如何设计和实现你的应用程序;不知道你是怎么做到的,不可能说你应该使用Vector还是Set

注意:类java.util.Vector是一个遗留集合类,您应该真的使用java.util.ArrayList来代替。

+0

我的讲师说我宁愿用矢量来设置。 但是当我搜索自动机材料时,人们通常在他们的代码中使用set。 我只是困惑,当我必须设计过渡。他说我的国家包括transIn,TransOut和符号。其中我的transIn和TransOut是一个矢量.. – gin 2010-07-05 01:44:44

+0

问题是,你试图从高级问题(“我想写一个有限自动机程序”)立即跳转到低级实现细节(“我应该使用'Vector'或'Set'),你应该完全使用它,取决于中间是什么,首先考虑你要使用的算法,然后考虑如何将该算法放入代码中。考虑哪种数据结构最适合该算法。 – Jesper 2010-07-05 06:45:43