2017-01-21 69 views
-1

Map(或HashMap)需要一段時間來插入,移除和檢索。雖然迄今爲止我所知道的所有其他數據結構並不需要一定的時間,上述操作的時間取決於輸入的大小。爲什麼我們需要除HashMap以外的數據結構

那麼,爲什麼我們需要所有其他數據結構呢?不是HashMap是通用數據結構嗎?

+0

'是不是HashMap的是通用的數據結構' - ?不,它不保留元素順序並不會允許重複和不會讓你通過索引訪問元素... – rkosegi

+0

嘗試學習Go,其中地圖基本上是唯一的內置數據結構(除了數組)。你*可以*只是使用地圖的東西;但是用map *執行一個集合的新穎性又會很快消失。 –

+0

你從哪裏得知Insert,Remove和Retrieve需要一段時間? ['這個實現爲基本操作提供了恆定的性能(get和put),假設散列函數在桶之間正確地分散元素。「](https://docs.oracle.com/javase/8/docs/ api/java/util/HashMap.html),因爲你不能提供散列函數,但是使用類型的內建函數... – TheConstructor

回答

1

地圖表現不是免費的,成本是內存和複雜性。

對於所有不關心性能和不需要訪問集合中的一個元素的情況,都存在其他數據結構。例如,如果您有給定的元素字符串列表,並且您在代碼中使用的唯一用途是打印出此元素列表,則更好的選擇是使用字符串數組。

另一個例子,可能是元素的順序。如果您關心元素的順序,那麼地圖不是您應該使用的數據結構,因爲順序無法保證,所以您必須在每次需要時進行排序。

這些只是兩個例子,對於每個存在的數據結構還有很多其他的例子。

+0

「你不關心性能」當你*關心性能時,你使用不同的數據結構。例如,你可以用'Map '來模擬一個'List '(就像JS用的數組一樣)。但是性能會比使用ArrayList更糟糕。 –

+0

@AndyTurner特別是如果你想索引改變插入或刪除。 –

+0

@AndyTurner我的意思是在獲取價值的過程中表現出色,正如OP所要求的。 –

0

的HashMap不應該被用來當

  • 一個普通的Java對象會做的工作。 Java對象是類型安全的並且更高效。
  • 當你需要一個排序後的集合。
  • 當鍵是一個枚舉。
  • 當索引是從int開始的0.
  • 當鑰匙可能改變時。
  • 當你想併發訪問。
  • 當您需要任何訂購或您的收藏中的優先級。
  • 當你需要一套東西(即沒有值)
相關問題