怎样生成和使用一个不定长的数组,数组可能是多维的

解决方案 »

  1.   

    你用容器和hashtable组合不就实现了。
      

  2.   

    java.util.Vector
    or
    java.util.ArrayList
    or
    java.util.LinkedList
      

  3.   

    能不能说得细致一点?
    我是一个java新手:)
      

  4.   

    多少维至少要知道吧 ?
    Object[] o ;
    然后就可以随便往 o 里放东西了
    可以放一个 o[x] = Object[] b ;
    把一个数组作为一项放进o这个数组....随你发挥啦
      

  5.   

    你是不是想解决在运行时动态修改数组大小的问题呀?如果是的话,最简单的方法是使用一个工作机制同数组类似但是可以动态伸缩的类。这个类叫做ArrayList。在Java中,数组列表示类数组对象,它可以动态伸缩而无需编写任何代码。如果是这个意思的话,还想了解更多,直接回复我就行了。我在给你往上写,太多了,怕是你不需要的。
      

  6.   

    Vector v=new Vector();
    for(int i=0;i<10;i++) {
      v.addElement(""+i);//必须是Object类型,如果要加入数值,则用new Integer(i)
    }
    for(int i=0;i<10;i++) {
      System.out.println(v.elementAt(i));
    }
      

  7.   

    给断代码,注意:1,无需指定数组大小;2,用add增添任意多的元素;3,用size()代替length来统计元素个数;4,用(Employee)a.get[i]代替a[i]来访问一个元素。import java.util.*;public class ArrayListTest
    {
    public static void main( String[] args )
    {
    ArrayList staff = new ArrayList();

    staff.add( new Employee( "Carl Cracker", 75000, 1987, 12, 15 ) );
    staff.add( new Employee( "Harry Hacker", 50000, 1989, 10, 1 ) );
    staff.add( new Employee( "Tony Tester", 40000, 1990, 3, 15 ) );

    for ( int i = 0; i < staff.size(); i++ )
    {
    Employee e = ( Employee )staff.get( i );
    e.raiseSalary( 5 );
    }

    for ( int i = 0; i < staff.size(); i++ )
    {
    Employee e = ( Employee )staff.get( i );
    System.out.println( "name=" + e.getName() + ",salary=" + e.getSalary() + ",hirDay=" + e.getHireDay() );
    }
    }
    }class Employee
    {
    public Employee( String n, double s, int year, int month, int day )
    {
    name = n;
    salary = s;
    GregorianCalendar calendar = new GregorianCalendar( year, month - 1, day );
    hireDay = calendar.getTime();
    }

    public String getName()
    {
    return name;
    }

    public double getSalary()
    {
    return salary;
    }

    public Date getHireDay()
    {
    return hireDay;
    }

    public void raiseSalary( double byPercent )
    {
    double raise = salary * byPercent / 100;
    salary += raise;
    }

    private String name;
    private double salary;
    private Date hireDay;
    }
      

  8.   

    数组列表
    我可是很辛苦一个字一个字敲上去的,希望你不会觉得没有用 :)
    在很多编程语言中——特别是C——你必须在编译时确定所有数组的大小。程序员对此十分愤恨,因为它强迫他们做不确定的事。一个部门有多少员工呢?肯定不超过100。如果一个很大的部门有150个员工呢?你愿意为每个只有10名员工的部门浪费90个条目吗?
    在Java中,情况大有改观。你可以在运行时确定数组的大小。
    Int arctualSize = ……;
    Employee[] staff = new Employee[actualSize];
    当然,这段代码也没有完全解决在运行时动态修改数组大小的问题。一旦你设置了数组的大小,你就不能改变它。Java中解决此类问题最简单的方法是使用一个工作机制同数组类似但是可以动态伸缩的类。这个类称作ArrayList。在Java中,数组列表是类数组对象,它可以动态伸缩而无需编写任何代码。
    注意  在Java编程语言的旧版本中,程序员使用Vector类来自东伸缩数组大小。然而,ArrayList效率更高,你可以用其代替Vector。
    数组和数组列表之间有很重要的区别。数组是Java语言的一个功能,对于每一个元素类型T又有一个数组类型T[];然而,ArrayList类是一个类库,它定义在java.util包中。这是一个单一的“一个尺寸容纳所有类型”的类型,它可以放所有Object类型。特别是,无论何时如果你需要从一个数组列表中提取一想,那么你需要进行类型转换。
    使用add方法可以太一个数组列表中添加新元素。下面例子说明了如何建立一个数组列表然后用员工对象来填充它:
    ArrayList staff = new ArrayList();
    staff.add( new Employee( ……) );
    staff.add( new Employee( ……) );
    ArrayList类管理了一个内部的对象数组。最后,数组可以用完空间。这就是数组列表的神奇之处了:如果你调用add并且数组已满,那么数组列表能够自动的建立一个更大的数组并且自动地把所有对象从小的数组拷贝进大的数组。
    如果你已经知道或者你能预计需要存储多少元素,那么一可以在填充数组列表之前调用ensureCapacity方法:
    staff.ensureCapacity(100);
    这个调用会分配一个包含100个对象的内部数组。接着你可以一直调用add,他不会重新分配空间。
    也可以把初始容量传给ArrayList构造器:
    ArrayList staff = new ArrayList(100);
    警告  分配一个数组列表( new ArrayList[100] // capacity is 100 )不同于非配一个新数组( new Employee[100] // size is 100 )。数组列表的容量和数组的大小有很重要的区别。如果你分配给数组100个元素的大小,那么该数组就有了100个空槽可以使用。而具有100个元素的容量的数组列标志是具有了容纳100个元素(事实上,如果进行附加分配的话,可以超过100)的潜力,但是在开始的时候,甚至初始化构造完成以后,该数组列表都根本不会有任何元素。
    size方法返回数组列表的实际元素个数。例如:
    staff.size();
    将返回satff数组列表的当前元素个数。这等价于数组a的a.length。
    一旦你确信数组列表大小不再变化,那么你可以调用trimToSize方法。该方法把内存块的大小调整为当前元素所需存储空间相等。垃圾回收器将回收任何多余的内存。
    注意  一旦你整理了一个数组列表的大小,那么增加新元素会重新移动内存块,这会很费事。最好你确信不继续增加新元素才使用trimToSize方法。
    C++注意  ArrayList类在很多方面都不同于C++中的vector模板。最值得注意的是,因为vector是一个模板,所以只有正确类型的元素才能够被插入,并且从vector中提取元素是吴学进行造型转换。例如,编译器决不允许你把Data对象插入到vector<Employee>中。C++ vector模板重载了[]运算符,这样可以很方便的进行元素访问。因为Java没有操作运算符重载,所以它必须使用显示的法调用。C++ vector 按值拷贝。如果a 和b 是两个vector,那么赋值a=b;会把a放进一个同b大小相同的新vector中,同时所有元素都从b到a拷贝一遍。而在Java中,统一赋值语句会使a和b指向同一数组列表。
    API  java.util.ArrayList
    ArrayList()   
    构造一个空数组列表。
    ArrayList( int initialCapacity )
    构造一个具有指定容量的空数组列表。
    参数:initialCapacity数组类标的初始存储容量
    Boolean add( Object obj )
    把一个元素追加到数组列表的结尾。总是返回true。
    参数:obj添加的元素
    int size()
    返回存储在数组列表中的当前元素个数。(该值不同于也决不会大于数组列表的容量)
    void ensureCapacity( int capacity )
    保证数组列表具有存储给定数目元素的容量,并且不重定位其内部存储数组。
    参数:capacity需要的存储容量
    void trimToSize()
    把数组列表的存储容量减小到其当前尺寸。
    (1) 访问数组元素列表
    不幸的是,没有免费的午餐。自动伸缩带来方便,也增加了访问元素语法的复杂度。原因是ArrayList类不是Java语言的一部分;它只是提供在标准类库中的由某人编写的工具类而已。
    不像访问数组元素那样可以使用[]语法,在这里你必须使用set和get方法。
    例如,如欲设置第I个元素,应该使用:
    staff.set(i,harry);
    这等价于数组中的:
    a[i] = harry;
    得到艺术组列表元素更为复杂,这是因为get方法的返回类型为Object。你需要把它转换为需要的类型:
    Employee e = ( Employee ) staff.get[i];
    这等价于:
    Employee e = a[i];
    显然,前者麻烦多了。
    注意  数组列表同数组一样,其下标都是从0开始的;
    提示  有时两者都可以满意的同时得到——灵活的伸缩和方便元素访问——如果你使用如下技巧。首先,建立一个数组列表并增加元素。
    ArrayList list = new ArrayList();
    While(……)
    {
    x = ……;
    list.add(x);
    }
    完成后,使用toArray方法把所有的元素拷贝到数组中:
    X[] a = new X[ list.size() ];
    List.toArray( a );
    警告  直到数组列表的尺寸大于I时才可以进行如下调用:list.set( i, x )。例如,下面代码是错误的:
    ArrayList list = new ArrayList(100);  // capacity 100, size 0
    List.set( 0, x );  // no element 0 yet
    使用add方法来代替set方法进行数组列表的填充,当仅仅需要替换一个添加过的元素时才使用set方法。
    数组列表天生具有不安全性。很有可能把一个错误类型的元素添加到一个数组列表中。
    Data birthday = ……;
    Staff.set(i, birthday );
    编译器不会报告错误。虚拟机会“准确”的把一个Data的对象转换成Object,但是当该对象从数组列表中提取出来时,他有可能会被造型转换成一个Employee对象。这是一个无效的转换,系统将会非正常推出。问题很严重!其产生根源是数组列表Object类型的值。如果staff是一个Employee数组的饮用,那么编译器不会允许把一个日历对象放进其中。
    Employee[] a = new Employee[100];
    A[i] = calendar; //  ERROR
    在非常罕见的情况下,数组列表对于异构集合来说是有用的。
    在数组列表中添加一些完全不相关的类对象。当这些元素被提取时,他们每一个类型都要进行测试,代码如下:
    ArrayList list;
    List.add( new Employee(……) );
    List.add( new Data(……) );
    ……
    Object obj = list.get( n );
    if  ( obj instanceof Employee )
    {
    Employee e = ( Employee )obj;
    ……
    }
    然而,通常认为这种代码非常糟糕。把类型信息丢弃在一边,然后再费力的寻找它们,这不是一个好办法。
    API  java.util.ArrayList
    void set( int index, Object obj )
    设置数组列表指定位置元素的值,它会覆盖原来的内容。
    参数:index位置(必须介于0到size()-1之间)
    obj新值
    Object get( int index )
    得到指定位置存储的元素值。
    参数:index欲获取元素的位置(必须介于0到size()-1之间)
    (2) 在数组列表的中间插入和删除元素
    不仅可以在数组列表的末尾追加元素,也可以在中间插入元素。
    int n = staff.size()/2
    setff.add(n,e)
    位置n及其后面的元素都要往后挪动一个位置一边插入新的元素。如果插入后的数组列表大小抄过去容量,那么系统要重新分配数组列表的存储数组。
    同样,你可以从数组的中间删除元素。
    Employee e = (Employee)staff.remove( n );
    n后面的元素拷贝到期相应的前一个位置,同时数组的大小减一。
    插入和删除元素需要考虑到效率问题。如果操纵晓得数组列表,那么效率问题可能并不重要,但是如果列表中有大量元素并且要不断的增删元素,那么你最好是用一个链表来代替。
      

  9.   

    看下面这个例子,请注意:
    无需指定数组大小;
    用add增添任意多的元素;
    用size()代替length来统计元素的个数;
    用(Employee)a.get[i]代替a[i]来访问一个元素。
    例:
    /**
       @version 1.00 2000-04-30
       @author Cay Horstmann
    */import java.util.*;public class ArrayListTest
    {  
       public static void main(String[] args)
       {  
          // fill the staff array list with three Employee objects
          ArrayList staff = new ArrayList();      staff.add(new Employee("Carl Cracker", 75000,
             1987, 12, 15));
          staff.add(new Employee("Harry Hacker", 50000,
             1989, 10, 1));
          staff.add(new Employee("Tony Tester", 40000,
             1990, 3, 15));      // raise everyone's salary by 5%
          for (int i = 0; i < staff.size(); i++)
          {
             Employee e = (Employee)staff.get(i);
             e.raiseSalary(5);
          }      // print out information about all Employee objects
          for (int i = 0; i < staff.size(); i++)
          {  
             Employee e = (Employee)staff.get(i);
             System.out.println("name=" + e.getName()
                + ",salary=" + e.getSalary()
                + ",hireDay=" + e.getHireDay());
          }
       }
    }class Employee
    {  
       public Employee(String n, double s, 
          int year, int month, int day)
       {  
          name = n;
          salary = s;
          GregorianCalendar calendar
             = new GregorianCalendar(year, month - 1, day);
             // GregorianCalendar uses 0 for January
          hireDay = calendar.getTime();
       }   public String getName()
       {  
          return name;
       }   public double getSalary()
       {  
          return salary;
       }   public Date getHireDay()
       {  
          return hireDay;
       }   public void raiseSalary(double byPercent)
       {  
          double raise = salary * byPercent / 100;
          salary += raise;
       }   private String name;
       private double salary;
       private Date hireDay;
    }
    API  java.util.ArrayList
    void add( int index, Object obj )
    移动元素然后插入新元素。
    参数:index 插入位置(必须介于0到size()之间)
          obj  新元素
    void remove( int index )
    删除指定位置元素然后把其后面元素往前挪动一个位置。
    参数:index删除元素的位置(必须介于0到size()-1之间)经过一个早上和一个中午,终于完成了,希望这些东西能够对你有所帮助,如果不介意的话,交个朋友吧。我的QQ号是:53377952,你只需在通过验证那里写上Java就好了
      

  10.   

    全部是在答非所问。!!!!!
    看看java.util.Arrays吧,各位。