逻辑帮助在java中进行列表操作

时间:2012-04-03 05:57:26

标签: java algorithm oop list

我需要小帮助。我有2个列表(比如A和B),它们包含用户定义类的对象。

A和B都有一个方法getId(),它将返回一个整数(ID)。现在,我需要将List A中每个对象的ID与List B的每个对象进行比较。如果ID相同,那么我必须将该对象从B替换为A.

如果A中对象的id不在B中,那么我会将该对象添加到B

请告诉我如何实现这个

的逻辑

由于

4 个答案:

答案 0 :(得分:3)

这样的东西会起作用,假设你的列表是一个arrayList,可以访问带索引的元素

for(int i=0;i<a.size();i++)
    for(int j=0;j<b.size();j++)
       if(a.get(i).getId().equals(b.get(j).getId()){
         //this id from A exists in B. Replace
         b.get(j)=a.get(i);
       }
       else{
          if(j=(b.size()+1)){ // if true the whole b list have been searched
             //object not found. Add it to b
             b.add(a.get(i));      
          } 
}

这要求a和b中的元素覆盖等于statment,因此他们可以将ID与彼此进行比较

答案 1 :(得分:2)

为什么不使用Hashtable代替List。您可以将ID作为每个对象的键。

答案 2 :(得分:1)

您应该使用getID()方法的接口:

public interface Identity {    
     public long getID();
}

现在我们开始同步两个列表:

private List<Identity> listA = new ArrayList();
private List<Identity> listB = new ArrayList();

private void syncLists() {
    final Map<Long, Identity> map = new HashMap();

    // add all elements of list b
    for ( Identity element : this.listB ) {
        map.put( element.getID(), element );
    }

    // add all elements of list a, overwrite the existing ones of b
    for ( Identity element : this.listA ) {
        map.put( element.getID(), element );
    }

    // write the elements of the map back into the lists
    this.listA = new ArrayList( map.values() );
    this.listB = new ArrayList( map.values() );
    // list a contains the same references as list b now
}

我假设你的对象没有覆盖equals()!

答案 3 :(得分:1)

我创建的示例程序。希望这可能有所帮助。

public static void main(String[] args) {
    List<User> A = new ArrayList<User>();
    List<User> B = new ArrayList<User>();
    A.add(new User(1, "A1"));
    A.add(new User(2, "A2"));
    A.add(new User(3, "A3"));

    B.add(new User(1, "B1"));
    B.add(new User(4, "B4"));
    B.add(new User(5, "B5"));

    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < B.size(); j++) {
            if (A.get(i).getId() == B.get(j).getId()) {
                B.remove(j);
                B.add(j, A.get(i));
            } else {
                if (!B.contains(A.get(i))) {
                    B.add(A.get(i));
                }
            }
        }
    }
    System.out.println("-----Finally------");
    for (User u : A)
        System.out.println("From A-->" + u.getName());
    for (User u : B)
        System.out.println("From B-->" + u.getName());

}

类用户是:

class User {
public int id;
public String name;

User(int id, String name) {
    this.id = id;
    this.name = name;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

但建议使用Map !!!