日期:2014-05-20 浏览次数:20682 次
有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代替,在线等。。。谢谢 大虾
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()) ; } } }