昨天一朋友给我一个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本身的结构有什么样的关联呢?
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本身的结构有什么样的关联呢?
comObj是两个对象id,针对像这样情况如何获取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...");
}
上面的有问题:如下
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);
}
}
}
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);
}
}
}}