2010-11-13 8 views

Odpowiedz

4

Odpowiadam na własne pytanie w oparciu o to, czego się dowiedziałem.

Wektory są szybsze dla tych typów danych tylko: - (proof)

  • int
  • uint
  • Ilość
  • Boolean

Tablice są korzystne wszystkie pozostałe typy S:

  • Struny
  • klas

Wektory są bardziej ograniczone do pracy z:

  • odczytu/zapisu jest granice zaznaczone
    • nieistniejące szczeliny nie mogą być ustaw bezpośrednio za pomocą [5] = Val
    • nieistniejące szczeliny nie można odczytać (lub dostaniesz wyjątek)
  • musi push() do tworzenia szczelin
  • sortowania jest wolniejszy

Wektory są bardziej kłopotliwe:

  • wielo-D tablice nie może być przekształcony w wektorze
  • wektor nie można przeprowadzić w wielowymiarowej tablicy D
  • nie może pracować z String.split()
  • stałym typu dla wszystkich elementów - bezużyteczny dla JSON

Wektory mogą być łatwiejsze do debugowania:

  • ustawienie [Vector z int] Do [Wektor Wektor wskazówki] wygeneruje wyjątek
  • błędy w czasie kompilacji (w niektórych przypadkach)
    • gdy próbuje ustawić [Vector z int] do [Vector sznurków]
    • gdy próbuje ustawić [wektor o wskazówki] do [Wektor Wektor wskazówki]
+0

Interesujące. Sam zastanawiałem się, jak zastąpić różne klasy kolekcji, których używam jako dostawców danych dla różnych kontrolek zorientowanych na "ListBase". Jedną z ogromnych wad, które widzę, jest to, że nie można ustawić 'źródła'' wektora 'w taki sposób, jak to możliwe za pomocą' ArrayCollection'. Możesz nawet utworzyć instancję prostego 'Array' używając' Array.slice() 'z innej tablicy. Myślę, że wektory muszą rosnąć iteracyjnie. Zastanawiam się teraz, za co ich użyję. – Robusto

+0

Jeśli nie masz nic przeciwko, Jarvis, mam kilka pytań: Dlaczego tablice są preferowane dla Strings i jak nie możesz pracować z String.split()? – Panzercrisis

6

Mnóstwo powodów. Wektory nie są słabo zaludnione, więc jeśli Twój wektor ma indeks 999, masz tablicę 1000 elementów. W standardowej tablicy możesz mieć tylko kilka.

+2

Wektor może być ewentualnie o stałej długości, to znaczy jego długość nie może ulec zmianie. I nigdy nie możesz dodać więcej niż jednego elementu do tablicy (z powodów wymienionych w odpowiedzi). Powiedział, że wektory są bardzo ładne z dwóch powodów, o których wspomniałeś. – Robusto

+0

Twój właściwy tor, ale sformułowałem idealne użycie wektory w porównaniu do tablic. Zobacz moją odpowiedź. –

3

Może szczególnie, gdy nie znasz typu - w pewnym sensie jest to luźna lista. Na przykład z danymi JSON.

Edytuj: o, tu jest inny pół-powód - String.split(). To ci zwróci tablicę smyczków. Dunno, dlaczego nie możesz wydobyć z niego Vector.<String>, grr.

Z tym powiedziane, we Flash 10+, 99% czasu będziesz używał Wektory zamiast tego. Wszystkie "wady" Wektory są tylko dla bardzo szczególnych (często rzadkich) przypadków użycia.

+0

Dzięki za pomoc, ale odpowiedziałem na własne pytanie, mam nadzieję, że pomoże ci to w szerszym zrozumieniu tematu. –

2

Jak już powiedział Robusto, wektory nie są słabo zaludnione. Chociaż może to być złe ze względu na rozmiar, jest bardzo dobre dla szybkości. Więc jeśli nie potrzebujesz bardzo rzadkich zaludnionych struktur (a to, aby zaimplementować tę rzadką rzecz również zajmuje dodatkową przestrzeń), możesz po prostu skorzystać z prędkości.

Jest to typowy handlu od: Pamięć vs. prędkości :-)

+0

Odpowiedziałem na własne pytanie, mam nadzieję, że pomoże ci to w szerszym zrozumieniu tematu. –

2

To po prostu zależy od tego, co próbujesz zrobić. Spróbuj posortować wektor? To potrwa znacznie dłużej. Czy będziesz musiał splatać tablicę lub wektor? W takim przypadku prawdopodobnie zechcesz je wyrzucić i użyć połączonej listy. Jeśli szukasz czegoś z nazwanymi kluczami, które musisz odwołać, to prawdopodobnie użyjesz Słownika. Jest to niejasna, bezużyteczna odpowiedź - "to zależy" - ale tak naprawdę działa. Jest powód, dla którego istnieje tak wiele różnych struktur listy danych.

+0

Sprawdź moją odpowiedź, chłopaki! Mam nadzieję, że to pomoże. –

Powiązane problemy