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


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

以下set特指C++的set容器,hashset指java中的。

1、set和hashset都不允許元素重復,但是set是有序的,hashset無順序,所以向set插入元素必須重載<操作符比較大小,而hashset只需重載equal(),比較是否相等即可。

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

 

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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com