请问,Java中,泛型数组的数组怎么初始化?(就是ArrayList数组)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问,Java中,泛型数组的数组怎么初始化?(就是ArrayList数组)相关的知识,希望对你有一定的参考价值。

在Java中,我定义了一个泛型数组的数组,请问怎么才能正确的将他初始化?
ArrayList<Integer>[] arrayss;
就是这个数组,不知道怎么初始化,求高手指点,不胜感激!

补充,下面的方法我也试过,但是都没通过编译
arrayss=new ArrayList<Integer>[10];
arrayss=new ArrayList[10];

或者是否可以通过其他方法达到这个数组的目的。这个数组会比较大,成千上万。
arrayss=new ArrayList<Integer>[10](); 刚试了,还是不行,不能通过编译。

我想要这样一个数组
int i[a][b],要求是 a 不可变,而 b 可变

arrayss = new ArrayList<Integer[]>(); //这个是用一个可变的ArrayList来装一个Integer数组,是指可以装不确定个Integer数组,而我要装的Integer数组的个数是确定的,而Ingeter数组里面的数的个数是不确定的。

谢谢puziguo 有个比较严重的问题,就是 这个a的个数相当的大,会到成千上万,甚至几十几百万,ArrayList的访问元素的复杂度比较高,会造成比较严重的性能下降。有没有更好的解决办法呢?谢谢了

既然你暗示就是ArrayList了,
首选就从Arraylist想了

可以试试:

import java.util.ArrayList;
public class Test
public static void main(String[]args)
ArrayList<ArrayList<Integer>> als = new ArrayList<ArrayList<Integer>> ();
ArrayList<Integer> a1 = new ArrayList<Integer>();
ArrayList<Integer> a2 = new ArrayList<Integer>();
ArrayList<Integer> a3 = new ArrayList<Integer>();
ArrayList<Integer> a4 = new ArrayList<Integer>();
//下面是添加行,你可以用循环添加固定的行
//每一列就是一个ArrayList<Integer>,你可以任意添加,长度不固定吧
als.add(a1);
als.add(a2);
als.add(a3);
als.add(a4);
System.out.println(als.size());




tao_3000的方法可行,只是Integer[]创建时要指定维数
可以自己写个算法自动增加维数

对于你说的数据量问题,个人理解是这样的:

达到了几十万几百万的数据量的时候,我想大概就是从数据库中吧数据读取出来,进行批量的处理或者更新之类的操作。
你说得很对,如此庞大的数据量肯定会使效率降低,
但是我们完全可以一次从数据库中读取几百条记录,进行操作

关于如何从数据库中一次读取很少的记录,jdbc和hibernate都有相应的实现

在者,数据量过大,呵呵,JVM可能崩溃哦 *_*
参考技术A java 不支持泛型数组,但是你可以这样声明:ArrayList<Integer>[] listArr=new ArrayList[3]; 参考技术B java 不支持泛型数组!!!

使用ArrayList<ArrayList<Integer>>吧
参考技术C arrayss=new ArrayList<Integer>[10](); 参考技术D 泛型包含在这个 java.util 包里
你在前面加了么?

请问java中深度copy一个二维数组是啥意思?怎么用代码实现?

一个二维数组可以看成一个一维数组,每个元素存储一个一维数组首地址的引用,这个没问题吧!
也就是说对于a[][],直接用b[][]=a,或者b[][]=a.clone() 都只是复制了一个引用(包括上面的arraycopy等方法),无法保证数据独立性,就是说a数组值改变会影响到b,反之亦然,这就是浅层复制。
如果二维数组存放类型为基本类型,则只需要b的每一行进行复制(Object.clone()可以保证对基本类型做深层复制api上有写):
b[][]=a.clone();//先利用浅层复制分配新的引用存放地址
for(int i=0;i<a.length;i++)
b[i]=a[i].clone();//a[i]指向数组的内容为基本类型,可以深层复制生成新引用对象

如果二维数组表示的是引用类型,则要对每一个元素调用clone(),并且保证所表示的引用类型遵循clone()复写原则。
b[][]=a.clone();//先利用浅层复制分配新的引用存放地址
for(int i=0;i<a.length;i++)
for(int j=0;j<a[0].length;j++)
b[i][j]=a[i][j].clone()//为每个元素进行深层复制



以上是规范写法,实现方法有很多,但一定要记住,单纯的对引用的COPY是没有意义的,编程中要避免。
参考技术A 用一个循环嵌套,把你的数组赋值一下。要么是用java里面的copy函数,很简单的奥。 参考技术B JDK6咯就直接用System.arraycopy(arr1,0,arr2,0,arr1.length)
● ArrayDemo.java
ipmubploirct cjalavas.s uAtirlr.aAyDreramoy s;
public static void main(String[] args)
int[] arr1 = 1, 2, 3, 4, 5;
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
for(int i = 0; i < arr2.length; i++)
System.out.print(arr2[i] + " ");
System.out.println();

参考技术C B : arry of Integer;
k : Integer;

k := 0;
for i := 1 to 10 do
if (A[i,1] = 0) and
(A[i,2] = 0) and
(A[i,3] = 0) and
(A[i,4] = 0) and
(A[i,5] = 0) then
else
begin
Inc(k);
SetLength(B, k)
for j := 1 to 5 do
B[i,j] := A[i,j];
end;

以上是关于请问,Java中,泛型数组的数组怎么初始化?(就是ArrayList数组)的主要内容,如果未能解决你的问题,请参考以下文章

请问java中深度copy一个二维数组是啥意思?怎么用代码实现?

请问C#中有没有判断数组元素重复,或如何去除重复呀?

jniC++怎么返回java的对象数组

请问在java数组中怎么判断奇数偶数的个数?

请教一个关于java泛型的问题

java请问怎么把前集合里的每十个元素放到一个对象<Number>里