作者Deltaguita (贝里斯)
看板java
标题[问题] 比HashSet<Long>更好的容器
时间Thu Dec 17 16:20:26 2015
想请教一下各位前辈
小弟目前 有上万笔形态爲long的资料,从json data 转换爲object 时
会依照分类放在HashSet<Long> 里面
会用HashSet的原因是免排序,
但是需要快速查出某个值是不是成员 (使用contain(long id)这个方法
因爲资料蛮多的,又把long wrap爲Long,占用了不少记忆体
想请问有没有更节省记忆体也可以快速判断的方式来存放这些资料呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.125.98.71
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1450340429.A.28E.html
1F:推 Jaymainal: 要省记忆体可能要将Set分类 而不是全部用同一个存 12/17 18:32
2F:→ Jaymainal: 当然还有个偷懒方式丢给DB去处理 12/17 18:32
3F:推 LaPass: 丢给db只可能更慢 囧 12/17 19:52
4F:→ LaPass: 还有你的顾虑是多余的,这种单一变数的东西,即使上万笔, 12/17 19:53
5F:→ LaPass: 也不会吃多少效能跟记忆体,大概吃料 8*10000~ 80kb而已 12/17 19:54
6F:推 sivid: bloom filter, radix sort, 还有自己手动切partition 12/17 23:30
7F:→ sivid: 几万个Long是应该没问题, 有疑虑的话先measure吧 12/17 23:31
8F:→ cha122977: 你直接用吧 真的发现慢在这里再说吧 12/18 01:12
9F:→ cha122977: 没记错的话HashSet找内容是O(1) 才几万笔应该还好 12/18 01:15
10F:→ Deltaguita: 一个set 约万笔,然後有10 个set 左右 XD 12/18 10:23
11F:→ Deltaguita: HashSet 搜寻真的很快,我不怀疑的 12/18 10:24
12F:→ Deltaguita: 目前发现从json 字串转成 object 超花时间 orz 12/18 10:25
13F:→ realmeat: json 转成 long 会多花时间? 12/18 12:15
14F:→ realmeat: 资料简单就写个简易 parser处理就好 12/18 12:16
15F:推 LaPass: json转物件是用哪一套? java的json转换有一堆libary 12/18 12:18
16F:→ LaPass: 要转物件的话大多是用反射去弄的吧 12/18 12:18
17F:→ Deltaguita: 目前是Gson, 这些code是在android 跑的 12/18 15:53
18F:→ Deltaguita: 在部分手机上来说,真的不太快 12/18 15:53
19F:→ Deltaguita: 基本上会让用户感到有点延迟 12/18 15:54
20F:推 yyc1217: Martin Fowler最近有篇文章 refactoring document load 12/18 19:34
21F:→ yyc1217: 刚好就是在谈字串转object的问题 好像是要用时再转 12/18 19:36
22F:推 LaPass: Gson还蛮快的阿.... 你是不是转换一次就new一次Gson? 12/18 19:43
23F:推 asdhhhman: gson是tread safe 12/18 23:29
24F:→ Deltaguita: Retrofit 应该不会干这种事XD 12/19 02:19
25F:→ Deltaguita: @yyc1217 马上就需要用到XD 而且是经常性的 12/19 02:22
26F:→ Deltaguita: @asdhhhman 我是一次就拿到好几笔的set 12/19 02:23
27F:推 yyc1217: 当字串来处理不要转成Long呢? 12/19 13:54
28F:推 yyc1217: 有个library叫Trove4j,有个TLongHashSet 12/19 14:21
29F:→ yyc1217: 可以用primitive value当key 12/19 14:22
30F:→ Deltaguita: @yyc1217 我会试试看 谢谢! 12/20 18:14
31F:→ marsyang1: 看要不要试试Guava的ImmutableSet 12/24 09:21
32F:→ Deltaguita: Guava整包 太肥了,不太适合在android 上跑 02/05 02:34