【发布时间】:2017-03-17 10:52:47
【问题描述】:
我有一个结构:
public class DataItem {
public int wordID, categoryID, documentID, count;
}
我有一个如下列表:
final public ArrayList<DataItem> data = new ArrayList<>();
我已经写了一个在里面搜索的方法:
public DataItem FindDataItem(final int wordID, final int categoryID, final int documentID)
{
for(DataItem dataItem : data)
if(dataItem.wordID == wordID && dataItem.documentID == documentID && dataItem.categoryID == categoryID)
return dataItem;
return null;
}
但是太慢了。如何加快速度?
我正在考虑四个 HashMap 相互内部,但我想像数据库表一样使用这些数据,因此很难在 HashMap 中按计数分组
我也在考虑ParalellStream,但是不知道怎么用。看起来很复杂。但它仍然是 O(n)。
我也在考虑使用数据库。但我不想有 IO。我希望它全部在 RAM 中。
请指导我完成这个。
【问题讨论】:
-
I am thinking about using a database too. But I don't want to have IO. I want it all inside RAM.然后你可以使用 SQLite,它是 DB-on-file,用法与任何其他 db 相同,除非你在客户端和服务器之间没有任何真正的连接。 -
@BackSlash 有 IO。
-
最好是 HashMap
- 因为 get(object) 可以在恒定时间内找到...
-
OP 数组可以包含多个具有相同值的数据项。她的 find 算法只返回第一个。如果您使用的是基于 dataItem 值的哈希映射,则不允许重复。被丢弃。
标签: java search parallel-processing hashmap