0

我有这个代码:

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将从数据库中获取新列表并执行以下操作:

  1. 如果id对象中没有 - 插入它
  2. 如果id在对象中但 sid 不同 - 替换它
  3. 如果有一个id不在all新列表中的 in - 删除它

这很简单,但正如我所见,我只能这样做:

for(...){
  for(...){
  }
  for(...){
}

一个内部for用于步骤 1 和 2,一个内部for用于步骤 3。

我想知道是否有更有效的方法。

4

2 回答 2

1

看起来您正在尝试缓存数据库记录...对于该任务,已经有可用的工具,其中之一是JPA可以透明地处理缓存

EcipeLink 为例

于 2013-08-16T16:07:10.503 回答
1

您可以通过两种方式提高效率(不包括 Yogendra Singh 评论中的一种):

  1. 改用HashMapwithid作为键。如果您需要元素的顺序与从数据库中收到的顺序相同,请使用LinkedHashMap.

  2. 如果您可以确保列表按 排序id,则可以只使用单个循环并使用迭代器在第二个列表上前进。

于 2013-08-16T16:07:59.807 回答