CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

请教关于ArrayList的数据存储结构【菜鸟上路】

楼主4031(请教)2006-03-04 17:40:35 在 Java / J2SE / 基础类 提问

昨天一朋友给我一个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本身的结构有什么样的关联呢?  
  问题点数:100、回复次数:7Top

1 楼4031(请教)回复于 2006-03-04 17:42:27 得分 0

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

2 楼treeroot(旗鲁特)回复于 2006-03-04 18:23:11 得分 0

当然是数组了Top

3 楼doway(john)回复于 2006-03-04 19:07:23 得分 0

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

4 楼lydvqq(碧水情缘♀黑哥)回复于 2006-03-04 19:26:41 得分 100

其实就是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...");  
  }Top

5 楼wizardblue()回复于 2006-03-04 19:41:48 得分 0

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

6 楼lydvqq(碧水情缘♀黑哥)回复于 2006-03-04 19:44:18 得分 0

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);  
  }  
                  }  
  }Top

7 楼lydvqq(碧水情缘♀黑哥)回复于 2006-03-04 19:49:52 得分 0

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);  
  }  
                  }  
  }  
   
  }Top

相关问题

  • sql数据存储问题
  • 数据存储问题
  • 数据存储讨论
  • 关于数据存储!
  • 数据存储(在线等)
  • 关于数据存储
  • 数据存储问题
  • session.setAttribute( ) 数据存储问题
  • .net数据存储问题
  • 简单的数据存储问题!

关键词

  • 结构
  • baseobj
  • comobj
  • xdrcomposite
  • addbase
  • asubcom
  • bsubcom
  • addcomposite
  • maincom
  • instanceof

得分解答快速导航

  • 帖主:4031
  • lydvqq

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo