我正在寻找与Java中的ArrayList相同的数据结构,它将项目保存在磁盘上而不是内存中。 java有这样的数据结构吗? 感谢
我希望有一个动态结构可以保存内存中的项目,当它的大小超过某个值时,在磁盘上保存新项目直到大小低于该值。
答案 0 :(得分:12)
您可以自己执行此操作:将ArrayList
序列化为磁盘。
确保列表的内容是可序列化的,即列表中的对象应实现Serializable
接口。
然后
写入文件:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));
oos.writeObject(list);
oos.flush();
oos.close();
从文件中读取:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));
List<YourClass> list = ois.readObject();
ois.close()
答案 1 :(得分:2)
如果您需要经常更改此ArrayList中的数据,更改磁盘映像,那么为什么不考虑http://www.hibernate.org/之类的内容?嗯,它比ArrayList复杂得多,但也提供了更多的功能。
答案 2 :(得分:2)
只需完成一组答案:)
XStream是一个简单的库 将对象序列化为XML并返回 试。
Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));
现在,要将其转换为XML,您只需要对XStream进行简单调用:
String xml = xstream.toXML(joe);
生成的XML如下所示:
<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>
答案 3 :(得分:1)
结帐http://jakarta.apache.org/jcs/。这提供了一种管理磁盘和RAM上的对象的方法。另一种可能的解决方案是使用http://code.google.com/p/pcollections/
答案 4 :(得分:1)
MapDB(mapdb.org)是一个库,它将java对象保存到各种集合中的磁盘:集合,映射,队列。
它支持缓存,因此您可以将最常用的项目放在内存中。
答案 5 :(得分:0)
另一种保存具有语言和传输中性优势的方法是使用Google的Protocol Buffers。
答案 6 :(得分:0)
请参阅https://dzone.com/articles/a-filebasedcollection-in-java-for-big-collections
try(FileBasedCollection<Integer> fbc = new FileBasedCollection<>()) {
for(int i = 1; i < 1000_000; i++) {
fbc.add(i);
}
long sum = 0;
try(FileBasedIterator<Integer> iter = fbc.iterator()) {
while(iter.hasNext()) {
Integer i = iter.next();
sum += i;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sum: " + sum);
}