昨天一朋友给我一个ArrayList的例子,该例子实现的结构就如
http://community.csdn.net/Expert/topic/4592/4592660.xml?temp=.6850244
描述的嵌套结构,只不过想通过一种不定成员方式来处理,源码如下:package org.ipdr.api;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;public class XDRComposite {

    /**
     * Define the XDRComposite type for 
     * CompositeType and CompositeData.
     */
private ArrayList alBase = new ArrayList();
private ArrayList alComposite = new ArrayList();
public void addBase(Object objBase) {
alBase.add(objBase);
} public ArrayList getBase(){
return alBase;
}

public void addComposite(XDRComposite objCom){
alComposite.add(objCom);
}

public ArrayList getComposite(){
return alComposite;
} public XDRComposite() {
super();
// TODO Auto-generated constructor stub
}

public static void main(String[] args){
XDRComposite mainCom = new XDRComposite();
XDRComposite aSubCom = new XDRComposite();
XDRComposite aSubCom_ = new XDRComposite();
XDRComposite bSubCom = new XDRComposite();
XDRComposite bSubCom_ = new XDRComposite();
mainCom.addBase(new Integer(1));
mainCom.addBase("China");
mainCom.addBase(new Double(1.0));
/*<11,"Shanghai",11.0>*/
aSubCom.addBase(new Integer(11));
aSubCom.addBase("Shanghai");
aSubCom.addBase(new Double(11.0));

/*<"China Shanghai",<11,"Shanghai",11.0>,"Shanghai China">*/
bSubCom.addBase("China Shanghai");
bSubCom.addComposite(aSubCom);
bSubCom.addBase("Shanghai China");

/*<12,"Shanghai_",12.0>*/
aSubCom.addBase(new Integer(12));
aSubCom.addBase("Shanghai_");
aSubCom.addBase(new Double(12.0));

bSubCom_.addBase("China Shanghai_");
bSubCom_.addComposite(aSubCom_);
bSubCom_.addBase("Shanghai China_");

mainCom.addComposite(bSubCom);
mainCom.addComposite(bSubCom_);
ArrayList aBase = mainCom.getBase();
ArrayList aCom = mainCom.getComposite();
for(Iterator it = aBase.iterator(); it.hasNext();){
Object baseObj = it.next();
if(baseObj instanceof Integer){
baseObj = (Integer) baseObj;
}else if(baseObj instanceof Double){
baseObj = (Double) baseObj;
}else if(baseObj instanceof String){
baseObj = (String) baseObj;
}else if(baseObj instanceof XDRComposite){
System.out.println("baseObj is XDRComposite");
baseObj = (XDRComposite) baseObj;
}
System.out.println(baseObj);
}
                  for(Iterator it = aCom.iterator(); it.hasNext();){
                            //这层我加的不知道对不对   
Object comObj = it.next();
if(comObj instanceof Integer){
comObj = (Integer) comObj ;
}else if(comObj instanceof Double){
comObj = (Double) comObj;
}else if(comObj instanceof String){
comObj = (String) comObj;
}else if(comObj instanceof Arrays){
comObj = (Arrays) comObj;
}else if(comObj instanceof XDRComposite){
System.out.println("comObj is XDRComposite");
comObj = (XDRComposite) comObj;
}
System.out.println(comObj); System.out.println("Test...");
}


}}
现在想获取aCom里的信息,因为aCom存储都是对象方式,和ArrayList本身的结构有什么样的关联呢?

解决方案 »

  1.   

    Debug跟踪的结果里
    comObj是两个对象id,针对像这样情况如何获取ArrayList列表的内容,谢谢!
      

  2.   

    看得我头大。List 中虽然可以放任何 Object,但实际应用时是不应该乱放的。特别是几个这样子的代码:comObj = (Arrays) comObj;,尤为荒谬。楼主到底是什么意思?
      

  3.   

    其实就是ArrayList中有个对象,对象中又有两个ArrayList.
    可以像下面这样,最好做个递归或其它算法来遍历comObj.
    以下是简单得到个值.
            for(Iterator it = aCom.iterator(); it.hasNext();){
           //这层我加的不知道对不对   
    Object comObj = it.next();
    if(comObj instanceof Integer){
    comObj = (Integer) comObj ;
    }else if(comObj instanceof Double){
    comObj = (Double) comObj;
    }else if(comObj instanceof String){
    comObj = (String) comObj;
    }else if(comObj instanceof Arrays){
    comObj = (Arrays) comObj;
    }else if(comObj instanceof XDRComposite){
    comObj = (XDRComposite) comObj;
    XDRComposite comSub = (XDRComposite) comObj;
    ArrayList comAl = comSub.getComposite();
    System.out.println("::comAl:::::"+comAl);

    for(Iterator subIt = comAl.iterator(); subIt.hasNext();){
    ArrayList dd = ((XDRComposite)subIt.next()).getBase();
    System.out.println(":::ddd::::"+dd);
    }
    }
    System.out.println(comObj);
    System.out.println("Test...");
    }
      

  4.   

    看不懂楼主想说什么,希望楼主最好多用些自然语言描述,另外我觉得要了解ArrayList的内部实现的话,自己看jdk的源码不就好了?
      

  5.   

    prt(aCom);
    上面的有问题:如下
    public static void prt(ArrayList al){
            for(Iterator it = al.iterator(); it.hasNext();){
    Object comObj = it.next();
    if(comObj instanceof Integer){
    comObj = (Integer) comObj ;
    System.out.println("---1--"+comObj);
    }else if(comObj instanceof Double){
    comObj = (Double) comObj;
    System.out.println("---2--"+comObj);
    }else if(comObj instanceof String){
    comObj = (String) comObj;
    System.out.println("--3---"+comObj);
    }else if(comObj instanceof Arrays){
    comObj = (Arrays) comObj;
    System.out.println("---4--"+comObj);
    }else if(comObj instanceof XDRComposite){
    comObj = (XDRComposite) comObj;
    XDRComposite comSub = (XDRComposite) comObj;
    ArrayList sl = comSub.getBase();
    System.out.println("--5---"+sl);
    prt(sl);
    }
            }
    }
      

  6.   

    package mytest;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;public class XDRComposite {

        /**
         * Define the XDRComposite type for 
         * CompositeType and CompositeData.
         */
    private ArrayList alBase = new ArrayList();
    private ArrayList alComposite = new ArrayList();
    public void addBase(Object objBase) {
    alBase.add(objBase);
    } public ArrayList getBase(){
    return alBase;
    }

    public void addComposite(XDRComposite objCom){
    alComposite.add(objCom);
    }

    public ArrayList getComposite(){
    return alComposite;
    } public XDRComposite() {
    super();
    // TODO Auto-generated constructor stub
    }

    public static void main(String[] args){
    XDRComposite mainCom = new XDRComposite();
    XDRComposite aSubCom = new XDRComposite();
    XDRComposite aSubCom_ = new XDRComposite();
    XDRComposite bSubCom = new XDRComposite();
    XDRComposite bSubCom_ = new XDRComposite();

    mainCom.addBase(new Integer(1));
    mainCom.addBase("China");
    mainCom.addBase(new Double(1.0));
    /*<11,"Shanghai",11.0>*/
    aSubCom.addBase(new Integer(11));
    aSubCom.addBase("Shanghai");
    aSubCom.addBase(new Double(11.0));

    /*<"China Shanghai",<11,"Shanghai",11.0>,"Shanghai China">*/
    bSubCom.addBase("China Shanghai");
    bSubCom.addComposite(aSubCom);
    bSubCom.addBase("Shanghai China");

    /*<12,"Shanghai_",12.0>*/
    aSubCom.addBase(new Integer(12));
    aSubCom.addBase("Shanghai_");
    aSubCom.addBase(new Double(12.0));

    bSubCom_.addBase("China Shanghai_");
    bSubCom_.addComposite(aSubCom_);
    bSubCom_.addBase("Shanghai China_");

    mainCom.addComposite(bSubCom);
    mainCom.addComposite(bSubCom_);
    ArrayList aBase = mainCom.getBase();
    ArrayList aCom = mainCom.getComposite();
    System.out.println("ArrayList aCom::::"+aCom);
    for(Iterator it = aBase.iterator(); it.hasNext();){
    Object baseObj = it.next();
    if(baseObj instanceof Integer){
    baseObj = (Integer) baseObj;
    }else if(baseObj instanceof Double){
    baseObj = (Double) baseObj;
    }else if(baseObj instanceof String){
    baseObj = (String) baseObj;
    }else if(baseObj instanceof XDRComposite){
    System.out.println("baseObj is XDRComposite");
    baseObj = (XDRComposite) baseObj;
    }
    System.out.println(baseObj);
    }
    System.out.println("-------------------------");
    prt(aCom); }
    public static void prt(ArrayList al){
            for(Iterator it = al.iterator(); it.hasNext();){
    Object comObj = it.next();
    if(comObj instanceof Integer){
    comObj = (Integer) comObj ;
    System.out.println("---1--"+comObj);
    }else if(comObj instanceof Double){
    comObj = (Double) comObj;
    System.out.println("---2--"+comObj);
    }else if(comObj instanceof String){
    comObj = (String) comObj;
    System.out.println("--3---"+comObj);
    }else if(comObj instanceof Arrays){
    comObj = (Arrays) comObj;
    System.out.println("---4--"+comObj);
    }else if(comObj instanceof XDRComposite){
    comObj = (XDRComposite) comObj;
    XDRComposite comSub = (XDRComposite) comObj;
    ArrayList sl = comSub.getBase();
    System.out.println("--5---"+sl);
    prt(sl);
    }
            }
    }}