CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

如何实现动态二维数组?

楼主Truman(Soul_Asylum)2001-03-31 16:44:00 在 Java / J2SE / 基础类 提问

一维可以用vector,二维如何实现?vector套vector屡试不爽 问题点数:120、回复次数:17Top

1 楼Truman(Soul_Asylum)回复于 2001-04-01 19:43:00 得分 0

居然没人知道?  
  Top

2 楼yangzi(笨笨)回复于 2001-04-01 19:47:00 得分 0

不好意思,我刚试通我的例子。  
  你可以用ArrayList嵌套来实现。  
  给你一个例子看一下:  
   
  import   java.util.*;  
   
  public   class     Test{  
      public   static   void   main(String   args[]){  
          ArrayList   a1=new   ArrayList();  
          ArrayList   a2=new   ArrayList();  
          a1.add("student");  
          a1.add("students");  
          a2.add(a1);  
          System.out.println(((ArrayList)a2.get(0)).get(1));  
      }  
  }Top

3 楼yangzi(笨笨)回复于 2001-04-01 19:50:00 得分 0

我用的是jdk1.3,Top

4 楼yaw()回复于 2001-04-02 09:35:00 得分 10

可以用一维的Vector来模拟二维的数组  
  Vector2   extends   Vector   {  
      m_iColCount   =   0;  
      public   setColCount(   int);  
      public   int   getColCount();  
      public   setRowCount(   int);  
      public   int   getColCount();  
      public   setValueAt(   Object,   int,   int);  
      public   Object   getValueAt(   int,   int);  
  }Top

5 楼robber(海盗)回复于 2001-04-02 09:47:00 得分 5

一维数组可以用一个的Vector  
  2维数组可以用两个的Vector  
  n维数组可以用n个的Vector  
  甚至可以使维数动态化  
  Top

6 楼yaw()回复于 2001-04-02 10:06:00 得分 5

2维数组可以用两个的Vector?  
  is   2*ColConut?Top

7 楼yaw()回复于 2001-04-02 10:07:00 得分 0

n维数组可以用n个的Vector?  
  is   RowCount   +   1?Top

8 楼lmy2000(pluto)回复于 2001-04-02 10:23:00 得分 0

觉得robber说的有理。因为Vector可以是动态增长的。Top

9 楼ursula(@@)回复于 2001-04-02 11:00:00 得分 0

you   can   use   HashtableTop

10 楼Dureek(普博)回复于 2001-04-02 11:13:00 得分 0

但是,   请不要在大型项目中使用Vector,   如果想用,   还得自己去构造一个类似的   :(Top

11 楼wenliang_d(走一步,是一步)回复于 2001-04-02 14:18:00 得分 0

to   Dureek(普博) :  
  为什么在大型项目当中不用vector?在stl当中,vector是最基本的模板,难道有什么问题吗?  
  共同探讨!Top

12 楼Truman(Soul_Asylum)回复于 2001-04-02 15:26:00 得分 0

我试了,不过不对劲,如:我设置第五行第三列为“shit",结果所有的行第三列都变成了'shit',  
  用vector套vector结果也是这样,不知何故。  
   
  import   java.util.*;  
   
  public   class     two{  
      public   static   void   main(String   args[]){  
          ArrayList   xArray   =   new   ArrayList();  
          ArrayList   yArray   =   new   ArrayList();  
   
          //Vector   vtContainer   =   new   Vector();  
          int   []   iSon   =   new   int[5];  
   
          for(int   i   =   0;   i   <   10;   i++){  
              xArray.clear();  
              for(int   j   =   0;   j   <   5;   j++){  
                  iSon[j]   =   0;//i*10   +   j;  
                  xArray.add("item"+iSon[j]);  
              }  
              //vtContainer.addElement(iSon);  
              yArray.add(xArray);  
          }  
           
          ((ArrayList)yArray.get(5)).set(3,"shit");  
   
          int   []   iTemp   =   new   int   [5];  
       
          //Array.newInstance(Integer,iTemp);  
          for(int   i   =   0;   i   <   yArray.size();   i++){  
              for(int   j   =   0;   j   <   ((ArrayList)yArray.get(i)).size();   j++){  
                  //ob   =   vtContainer.get(i);  
                  //out.print("Line   "   +   i   +   ":"   +   iTemp[j]);  
                  System.out.print(((ArrayList)yArray.get(i)).get(j));  
              }  
              System.out.print("\n");    
          }  
      }  
  }      
  Top

13 楼yangzi(笨笨)回复于 2001-04-03 19:05:00 得分 100

呵呵,我告诉你问题在哪。  
  看你的代码,  
  你只new出一个xarray来,然后同一个内容重复添加了10次。  
  所以你第一次都要new出一个xArray来。  
  用下面的代码试试:  
   
  import   java.util.*;  
   
  public   class     two{  
      public   static   void   main(String   args[]){  
  ArrayList   yArray   =   new   ArrayList();  
   
          //Vector   vtContainer   =   new   Vector();  
          int   []   iSon   =   new   int[5];  
   
          for(int   i   =   0;   i   <   10;   i++){  
      ArrayList   xArray   =new   ArrayList();  
              for(int   j   =   0;   j   <   5;   j++){  
                  iSon[j]   =   0;//i*10   +   j;  
   
                  xArray.add("item"+iSon[j]);  
              }  
              //vtContainer.addElement(iSon);  
              yArray.add(xArray);  
          }  
   
          ((ArrayList)yArray.get(5)).set(3,"shit");  
   
          int   []   iTemp   =   new   int   [5];  
   
          //Array.newInstance(Integer,iTemp);  
          for(int   i   =   0;   i   <   yArray.size();   i++){  
              for(int   j   =   0;   j   <   ((ArrayList)yArray.get(i)).size();   j++){  
                  //ob   =   vtContainer.get(i);  
                  //out.print("Line   "   +   i   +   ":"   +   iTemp[j]);  
                  System.out.print(((ArrayList)yArray.get(i)).get(j));  
              }  
              System.out.print("\n");  
          }  
      }  
  }  
  Top

14 楼yangzi(笨笨)回复于 2001-04-03 19:06:00 得分 0

呵呵,写错一个字;  
   
  所以你第一次都要new出一个xArray来。  
   
  应该是  
   
  所以你每一次都要new出一个xArray来。  
  Top

15 楼skyyoung(路人甲)回复于 2001-04-03 23:32:00 得分 0

怎么样还搞不点吗?Top

16 楼hello_wyq(半瓶墨水)回复于 2001-04-06 21:41:00 得分 0

效率实在是低,一个十分简单的问题被你们搞的十分的复杂。  
  我想问各位网友,如果它是C++的话,你们还会这样做的吗?  
  我想恐怕是没有人回这样的吧!  
  我来给你们一个解决的方法吧,举个例子把,我现在要创建一个int型的的动态数组,  
  仅仅是一个很简单的例子,网友可不要跟我叫汁!  
   
  Sample:  
   
  public   class   Test   {  
   
        public   int[][]   arr;  
         
        public   Test()   {  
   
              //我随意的取了一个3,就是说我的动态数组的初始化大小为3个NODE。  
              //你可以随意的更改。  
              arr   =   new   int[3][];  
   
              //动态创建它的两维部分,有点象树。  
              for(int   i   =   0,j   =   2;   i   <   arr.length;   i   ++)   {  
                  arr[i]   =   new   int[j   ++];    
              }  
               
              //初始化树的值;  
              int   index   =   0;  
              for(int   i   =   0;   i   <   arr.length;   i   ++)   {  
                  for(int   j   =   0;   j   <   arr[i].length;   j   ++)   {  
                          arr[i][j]   =   index   ++;  
                  }  
              }  
   
            //检验一下正确性;  
              for(int   i   =   0;   i   <   arr.length;   i   ++)   {  
                  for(int   j   =   0;   j   <   arr[i].length;   j   ++)   {  
                          System.out.print("             "   +   arr[i][j]);  
                  }  
                  System.out.println("");  
              }        
        }        
     
        public   static   void   main(String[]   args)   {  
              new   Test();  
        }  
  }  
   
  其实,上面的程序有许多的地方维护性比较的差,比如在添加一个元数时,  
  可能要进行很多的操作,其实这也很好解决。方法之一是把你要的数据封装  
  起来。这儿限于篇幅,我就不仔细展开了。网友如果有兴趣的话,我们可以  
  MAIL联系!Top

17 楼rainsoft(小雨)回复于 2001-04-08 11:13:00 得分 0

个为仁兄,二维动态数组有那么麻烦吗??  
   
  var     value   :array   of   array   of   Integer;  
   
    setlength(value,3,3);//你可以任意指定Top

相关问题

  • 如何实现动态开辟二维数组
  • java中如何实现二维(多维)动态数组.谢谢
  • 请问怎样实现动态分配一个二维数组
  • 如何实现动态二维数组的
  • 请问在vc中如何实现动态的二维数组?
  • 动态二维数组?
  • 三维字符数组的问题?或二维数组合成三维数组,实现动态访问?
  • 怎样动态创建二维数组?
  • 动态结构体二维数组
  • 如何动态申请二维数组

关键词

  • vector
  • 二维
  • arraylist
  • 动态
  • 实现
  • 维数组可以用
  • 可以用
  • add

得分解答快速导航

  • 帖主:Truman
  • yaw
  • robber
  • yaw
  • yangzi

相关链接

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

广告也精彩

反馈

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