我有这段代码:
public class Server{
public static ArrayList<Server> all;
public int id;
public int sid;
public Server(int id){
thid.id = id;
sid = fetchSidFromDB(id);
}
public Server(int id, int sid){
thid.id = id;
sid = sid;
}
public static void loadAll(){
//Assume that I fill 'all' with the servers from the db
all = new ArrayList<Server>();
}
//gets only a list of 'id's with out the sid
public static void refreshAll(){
}
}
//in the main
Server.loadAll();
Server.refreshAll();
我希望refreshAll
从db获取新列表并执行:
id
不在对象中 - 请将其插入id
在对象中,但sid不相同 - 请将其替换为id
中的all
不在新列表中,请将其删除这很简单,但正如我所看到的,我只能这样做:
for(...){
for(...){
}
for(...){
}
第1步和第2步内有for
,第3步内有for
。
我想知道是否有更有效的方式。
答案 0 :(得分:1)
看起来你正在尝试缓存数据库记录...对于那些任务,已经有了可用的工具,其中一个是JPA
,它可以透明地处理缓存
答案 1 :(得分:1)
你可以通过两种方式提高效率(不计算Yogendra Singh评论中的那个):
使用HashMap
代替id
作为密钥。如果您需要的元素与从数据库中收到的元素的顺序相同,请使用LinkedHashMap
。
如果您可以确保列表按id
排序,您可以使用单个循环并使用迭代器前进到第二个列表。