各位大佬好,今天看到一个ArrayList,我很郁闷,按照我之前的思路根本就不能赋值啊,数组1,数组2,经过搜索后发现只能用add这种笨方法,我特么有100w个也挨个add进去啊,这不是扯淡么?能参考此博文进行clone么?
For deep learning QQ Second Group 629530787
I'm here waiting for you
1,clone or copyof or 直接赋值{},[]等形式尝试。
举例子如下:
public class TestSomeFunction {
public static void printArray(int[][] x){
for (int i=0;i<x.length;i++){
for (int j=0;j<x[i].length;j++){
System.out.println("i="+i+",j="+j+",x[i][j]="+x[i][j]);
}
}
}
public static void main(String[] args) {
int [][]x=new int[][]{{1,2},{3},{3}};
printArray(x);
int y[][]=new int[3][];
y=x.clone();
printArray(y);
x[0][1]=12;
printArray(x);
printArray(y);
}
简单数组的复制clone,只能是浅复制,改变后结果都变了,for循环复制肯定没有问题。
【注意:上面的数组更像是python中的列表,而不是矩阵,因为j是变化的。另外数组的维度必须给定,就是上面的3,否则初始化失败。】
现在放List中,
这玩意无法实现这种复制,下面一打印啥都没有,就是个空数组([]形式)
List<Integer> array2 =new ArrayList<>(new Integer(12));
System.out.println(array2);
小括号内如果是一个数,那就是表示初始化长度。
其他瞎操作根本不行。
2,初始化方法如下:
2.1空集合
List<Integer> array = new ArrayList<Integer>(){};
System.out.println(array);
#[]
后面的大括号可以不带,初始化后还可以继续进行add
2.2指定大小??还是长度啥的?其实无需指定,可以自己增加。
List<Integer> array2 =new ArrayList<>(2);
System.out.println(array2);
array2.add(12);
array2.add(24);
array2.add(36);
System.out.println(array2);
指定了长度2.
2.3,上面的也可这么写
List<Integer> array = new ArrayList<Integer>(){{add(12);add(34);}};
2.4,快速初始化,将数组赋给它。
Integer p[] = new Integer[]{1,2,3,4};
List<Integer>array3 =new ArrayList<>(Arrays.asList(p));
System.out.println(array3);
当然也可,
List<Integer>array4=Arrays.asList(1,2,3,8,12,98);
System.out.println(array4);
上面的集合都可以直接打印的,当然也可挨个打印,如下:
Object[] k = array2.toArray();
System.out.println("down is print");
for (Object i:k)
System.out.println(i);
这个Object有点像cpp中的auto,自动定义类型。
2.4 数组里的集合
List<Integer> array5[]=new ArrayList[2];
array5[0]=new ArrayList<>(Arrays.asList(p));
array5[1]=new ArrayList<>(Arrays.asList(p));
System.out.println(array5[0]);
就是这种形式,里面的数组元素初始化方法只能用new这种快速形式,不能直接Array.asList()这种
下面这种也可以
array5[1]=new ArrayList<>(){{Arrays.asList(q);}};
array5[1]=new ArrayList<>(2){{add(21);}};
如果上面的array5[1]都写赋值,以最后一个为准,之前的赋值都没用了。替换了。