map和set都是stl中的關聯容器,map以鍵值對的形式存儲,key=value組成pair,是一組映射關系。set只有值,可以認為只有一個數據,并且set中元素不可以重復且自動排序,如果需要重復則使用multiset,要說區別的話,存儲的東西不一樣,應用場景不一樣,支持的操作也不一樣,很多不同。
map和set支持快速查找和刪除,一般使用RB樹來實現,當然后面還有用hashtable實現的,使用rb樹作為底層結構增刪數據都很快,不存在內存移動也就不容易出現迭代器失效的問題,這也就是區別于vector的原因-內存移動
Map中的每一個元素包含一個鍵對象和值對象,它們成對出現。鍵對象不能重復,值對象可以重復。
Set中的對象不按特定方式排序,并且沒有重復對象。但它的有些實現類能對集合中的對象按特定方式排序,例如TreeSet類,它可以按照默認排序,也可以通過實現java.util.Comparator接口來自定義排序方式。
總結如下:
set是一種關聯式容器,其特性如下:
set以RBTree作為底層容器
所得元素的只有key沒有value,value就是key
不允許出現鍵值重復
所有的元素都會被自動排序
不能通過迭代器來改變set的值,因為set的值就是鍵
map和set一樣是關聯式容器,它們的底層容器都是紅黑樹,區別就在于map的值不作為鍵,鍵和值是分開的。它的特性如下:
map以RBTree作為底層容器
所有元素都是鍵+值存在
不允許鍵重復
所有元素是通過鍵進行自動排序的
map的鍵是不能修改的,但是其鍵對應的值是可以修改的
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。