2010-07-03 67 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