[問題] 比HashSet<Long>更好的容器

作者: Deltaguita (貝里斯)   2015-12-17 16:20:26
想請教一下各位前輩
小弟目前 有上萬筆形態爲long的資料,從json data 轉換爲object 時
會依照分類放在HashSet<Long> 裡面
會用HashSet的原因是免排序,
但是需要快速查出某個值是不是成員 (使用contain(long id)這個方法
因爲資料蠻多的,又把long wrap爲Long,佔用了不少記憶體
想請問有沒有更節省記憶體也可以快速判斷的方式來存放這些資料呢?
作者: Deltaguita (貝里斯)   2014-02-05 02:34:00
Guava整包 太肥了,不太適合在android 上跑
作者: Jaymainal (發呆中)   2015-12-17 18:32:00
要省記憶體可能要將Set分類 而不是全部用同一個存當然還有個偷懶方式丟給DB去處理
作者: LaPass (LaPass)   2015-12-17 19:52:00
丟給db只可能更慢 囧還有你的顧慮是多餘的,這種單一變數的東西,即使上萬筆,也不會吃多少效能跟記憶體,大概吃料 8*10000~ 80kb而已
作者: sivid (go back to sleep)   2015-12-17 23:30:00
bloom filter, radix sort, 還有自己手動切partition幾萬個Long是應該沒問題, 有疑慮的話先measure吧
作者: cha122977 (CHA)   2015-12-18 01:12:00
你直接用吧 真的發現慢在這裡再說吧沒記錯的話HashSet找內容是O(1) 才幾萬筆應該還好
作者: Deltaguita (貝里斯)   2015-12-18 10:23:00
一個set 約萬筆,然後有10 個set 左右 XDHashSet 搜尋真的很快,我不懷疑的目前發現從json 字串轉成 object 超花時間 orz
作者: realmeat (真肉)   2015-12-18 12:15:00
json 轉成 long 會多花時間?資料簡單就寫個簡易 parser處理就好
作者: LaPass (LaPass)   2015-12-18 12:18:00
json轉物件是用哪一套? java的json轉換有一堆libary要轉物件的話大多是用反射去弄的吧
作者: Deltaguita (貝里斯)   2015-12-18 15:53:00
目前是Gson, 這些code是在android 跑的在部分手機上來說,真的不太快基本上會讓用戶感到有點延遲
作者: yyc1217 (somo)   2015-12-18 19:34:00
Martin Fowler最近有篇文章 refactoring document load剛好就是在談字串轉object的問題 好像是要用時再轉
作者: LaPass (LaPass)   2015-12-18 19:43:00
Gson還蠻快的阿.... 你是不是轉換一次就new一次Gson?
作者: asdhhhman (無名)   2015-12-18 23:29:00
gson是tread safe
作者: Deltaguita (貝里斯)   2015-12-19 02:19:00
Retrofit 應該不會幹這種事XD@yyc1217 馬上就需要用到XD 而且是經常性的@asdhhhman 我是一次就拿到好幾筆的set
作者: yyc1217 (somo)   2015-12-19 13:54:00
當字串來處理不要轉成Long呢?有個library叫Trove4j,有個TLongHashSet可以用primitive value當key
作者: Deltaguita (貝里斯)   2015-12-20 18:14:00
@yyc1217 我會試試看 謝謝!
作者: marsyang1 (Mars)   2015-12-24 09:21:00
看要不要試試Guava的ImmutableSet

Links booklink

Contact Us: admin [ a t ] ucptt.com