HashMap的问题

xietingyan 2007-09-12 01:17:45
要存储一个三维的稀疏的矩阵,典型的比如10*2000*10000,用数组显然不实际,
想法一:把坐标与value做一个类,用数组存储,但查找value时用Arrays.binarySearch()超级慢。
想法二:把三个坐标作为hash键,value作为值,但是当非稀疏的元素超过比如几十万的时候就出现Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
比如下面这个例子
HashMap hm = new HashMap();
for(int i=0;i<1000000;i++){
hm.put(Integer.toString(i), i);
}
System.out.print("end");
有没有什么办法又能解决稀疏的存储和查找的速度呢?
...全文
267 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyforlove 2007-09-13
  • 打赏
  • 举报
回复
试试MappedByteBuffer
xietingyan 2007-09-12
  • 打赏
  • 举报
回复
给错人了。。。。
xietingyan 2007-09-12
  • 打赏
  • 举报
回复
楼上的我考虑10*2000*10000*8字节= 16G所以认为不实际。
楼上的楼上的建议不错,我看过一个开源源代码,Cache,里面的计算要查找hesse矩阵的各元素,它采用的方法是先存储一部分数据内容到内存中,当需要不在内存中的那些行或列的值时再实时计算一部分。但偶考虑过了我的程序里用这个方法好像不行,因为我需要对3个坐标遍历求所有元素的和。
另,我搜索到一个帖子,难道C++的可以存储100万,java的不可以?
http://blog.csdn.net/touzani/archive/2007/08/24/1756865.aspx
flyforlove 2007-09-12
  • 打赏
  • 举报
回复
要存储一个三维的稀疏的矩阵,典型的比如10*2000*10000,用数组显然不实际

---------------------

你从哪方面考虑,这是显然不实际的?
lanseliuying 2007-09-12
  • 打赏
  • 举报
回复
你可以用HashMap,都存的话难免会发生内存溢出的情况,你可以考虑只存储非稀疏的元素,如果连非稀疏的元素都有几十万个而发生内存溢出时,那估计是没有办法了,谁让你数据那么多。考虑把数据转存到磁盘,分次处理吧。
shan1119 2007-09-12
  • 打赏
  • 举报
回复
不知道..
shili150 2007-09-12
  • 打赏
  • 举报
回复
关注中……

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧