今天用JAVA模拟了一次保皇问题,真的是被恶心到了,但同时发现了自己对于自定义类对象的数组,又忘了,在这里进行总结复习一下。再次膜拜CSDN大佬写的博客,帮助大的一批。ORZ;
一、自定义类对象一维数组
在整理之前,先贴出一段代码:
package ceshi;
import java.util.*;
import java.math.*;
class node
{
public int num;
public int kids;
public node()
{
num=kids=0;
}
public node(int num, int kids) {
this.num = num;
this.kids = kids;
}
}
public class Main {
public static void main(String[] args)
{
node[] t=new node[100];
for(int i=0;i<10;i++)
{
t[i]=new node(i,i);
}
}
}
看到这段代码,很多人可能都会注意到一个问题,每次对t【i】进行赋值时,都需要申请新的动态内存。这确实是我们需要注意的一点,
但是还有一个小问题,这时候如果我们输出t.length时会输出什么呢? 要不是10,要不是100.在代码中直接输出之后发现输出的值为100,
这说明,在默认的数组长度里,真正起作用的是我们究竟给数组申请了多少内存空间,而非我们实际上给元素申请的空间。
这就会造成很多的错误,比如说用ARRAYS.SORT进行排序时,如果不限制排序范围,就会发生空指针调用的错误。
二、自定义类对象的二维数组
还是先给出一段代码
package ceshi;
import java.util.*;
import java.math.*;
class node
{
public int num;
public int kids;
public node()
{
num=kids=0;
}
public node(int num, int kids) {
this.num = num;
this.kids = kids;
}
}
public class Main {
public static void main(String[] args)
{
node[][] t=new node[100][];
for(int i=0;i<10;i++)
{
t[i]=new node[100];
for(int j=0;j<10;j++)
{
t[i][j]=new node(i*j,i*j);
}
}
System.out.println(t.length);
}
}
其实二维数组一维数组的差别并不大,就是一维数组的元素仍然是一维数组,所有就多了一个t[i]=new node[100],其余的对比着两个代码看看即可。
三、关于容器的一丢丢的注意事项
当我们向容器类中加入元素使严禁这种写法(PS:当时自己都不知道自己是怎么死的)
package ceshi;
import java.util.*;
import java.math.*;
class node
{
public int num;
public int kids;
public node()
{
num=kids=0;
}
public node(int num, int kids) {
this.num = num;
this.kids = kids;
}
}
public class Main {
public static void main(String[] args)
{
List<node> list=new ArrayList<node>();
node t=new node();
for(int i=0;i<10;i++)
{
t.kids=i;
list.add(t);
}
}
}
大家可能都发现了这个问题,就是我容器内所有的元素用的都是一块内存空间,每当我的t改变的时候,list容器内所有的元素全都改变,所以每次都要申请新的内存空间。