由另一个arraylist刷新arraylist

时间:2013-08-16 16:00:17

标签: java

我有这段代码:

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获取新列表并执行:

  1. 如果id不在对象中 - 请将其插入
  2. 如果id在对象中,但sid不相同 - 请将其替换为
  3. 如果id中的all不在新列表中,请将其删除
  4. 这很简单,但正如我所看到的,我只能这样做:

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

    第1步和第2步内有for,第3步内有for

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

2 个答案:

答案 0 :(得分:1)

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

EclipeLink

上查看示例

答案 1 :(得分:1)

你可以通过两种方式提高效率(不计算Yogendra Singh评论中的那个):

  1. 使用HashMap代替id作为密钥。如果您需要的元素与从数据库中收到的元素的顺序相同,请使用LinkedHashMap

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