日期:2014-05-20  浏览次数:20694 次

两个ArrayList 怎么进行循环比较,在线等。。。。
HTML code
有ArrayList A 跟 B

A
id   name
1     甲
1     乙
1     丙
2     丁
2     戊
3     哥

B
id   name
1     A
1     B
2     C
2     D
3     E
3     F

怎样形成一个新的ArrayList   c
C
Aname    Bname
甲        A
乙        B
丙        NULL
丁        C
戊        D
哥        E
NULL      F

就是list A 与 list B id相等的拼起来,如果不相等,用Null代替,在线等。。。谢谢 大虾


------解决方案--------------------
Java code


import java.util.ArrayList;
import java.util.List;


class Node{
    private int id ;
    private String name ;
    
    public Node(){
    }
    public Node(int id, String name){
        this.id = id ;
        this.name = name ;
        
    }
    
    public int getId(){
        return this.id ;
    }
    public void setId(int id){
        this.id = id ;
    }
    
    
    public String getName(){
        return this.name ;
    }
    public void setName(String name){
        this.name = name ;
    }
}

class Node1{
    private String name1 ;
    private String name2 ;
    
    public Node1(){
    }
    
    public Node1(String name1, String name2){
        this.name1 = name1 ;
        this.name2 = name2 ;
    }
    
    public String getName1(){
        return this.name1 ;
    }
    public void setName1(String name1){
        this.name1 = name1 ;
    }
    
    public String getName2(){
        return this.name2 ;
    }
    public void setName2(String name2){
        this.name2 = name2 ;
    }

    @Override
    public String toString() {
        return "Node1 [name1=" + name1 + ", name2=" + name2 + "]";
    }
    
    
}

public class Test3{

   public static void main(String [] args){
   
     List<Node> listA = new ArrayList<Node>() ;
     
     listA.add(new Node(1, "甲")) ;
     listA.add(new Node(1, "乙")) ;
     listA.add(new Node(1, "丙")) ;
     listA.add(new Node(2, "丁")) ;
     listA.add(new Node(2, "戊")) ;
     listA.add(new Node(3, "哥")) ;
     
     List<Node> listB = new ArrayList<Node>() ;
     
     listB.add(new Node(1, "A")) ;
     listB.add(new Node(1, "B")) ;
     listB.add(new Node(2, "C")) ;
     listB.add(new Node(2, "D")) ;
     listB.add(new Node(3, "E")) ;
     listB.add(new Node(3, "F")) ;
     
     int idxA = 0 , idxB = 0 ;
     int oldId = -1 ;
     int aId = 0, bId = 0; 
     
     Node nA = null ,nB = null ;
     List<Node1> listC = new ArrayList<Node1> () ;
     
     
     while(idxA < listA.size() && idxB < listB.size()){
         
         nA = (Node)listA.get(idxA) ;
         aId = nA.getId() ;
         nB = (Node)listB.get(idxB) ;
         bId = nB.getId() ;
         
         if (oldId == -1){ 
             oldId = nA.getId() ;
         }
//         System.out.println(" idxA: "+ idxA + " -- "+ aId + " -- " + oldId + " --- " + bId 
//                 +" -- "+ " idxB: "+  idxB);
         if (aId == oldId){
             if (bId == oldId){
                 listC.add(new Node1(nA.getName(), nB.getName()) ) ; 
                 idxA++ ;
                 idxB++ ;
             }else{
                 listC.add(new Node1(nA.getName(), null) ) ;
                 idxA++ ;                 
             }
         }else if (bId == oldId){
             listC.add(new Node1(null, nB.getName()) ) ;
             idxB++ ;
         }else{
             oldId = aId ;
             if (bId == oldId){
                 listC.add(new Node1(nA.getName(), nB.getName()) ) ; 
                 idxA++ ;
                 idxB++ ;
             }else{
                 listC.add(new Node1(nA.getName(), null) ) ;
                 idxA++ ;                 
             }
             
         }
     }
     while(idxA < listA.size()){
         nA = listA.get(idxA) ;
         idxA++ ;
         listC.add(new Node1(nA.getName(), null) ) ; 
     }
     
     while(idxB < listB.size()){
         nB = listB.get(idxB) ;
         idxB++ ;
         listC.add(new Node1(null, nB.getName()) ) ; 
     }
     
     for (int i =0 ; i < listC.size(); i++){
         System.out.println(listC.get(i).toString()) ;
         
     }
     
   }
}