C++中的set和java的hashset有何區別?

之前對C++的STL容器爛熟於心,兩年沒碰過C++了,如今已經很生疏了。工做緣由轉戰java,對java的容器不甚瞭解,特別是每看到一種容器,不禁自主地拿起和C++對比。C++中的set和java的hashset有何區別,其實我也不太明白,google搜不到現成的答案,查了下相關資料,本身嘗試作個總結,正確與否有待討論了。java

如下set特指C++的set容器,hashset指java中的。數據結構

一、set和hashset都不容許元素重複,可是set是有序的,hashset無順序,因此向set插入元素必須重載<操做符比較大小,而hashset只需重載equal(),比較是否相等便可。函數

二、set底層數據結構爲紅黑樹,索引時間爲log(n),而hashset基於哈希表,比set要快一些,log(1)。google

 

至於各自的用法,其實C++中的set我通常用來排序,懶得本身寫排序函數,一堆雜亂無章的數據塞進去,取出來人家已經幫排好序了很安逸啊。java的hashset雖然沒有排序的做用,可是能夠幫去重呀,若是不想本身寫去重的方法,直接把數據扔到hashset中,取出來就是沒有重複的了。還有一個用處,數據量很大時怎麼快速判斷某個數是否是存在,hashset能夠在log(1)的時間幫你定位喲。其它的用處暫時沒想到了,畢竟仍是紙上談兵,java中複雜點的容器我統統尚未用過!排序

相關文章
相關標籤/搜索