JAVA——自定义类对象的一维数组二维数组的定义以及赋值的注意事项

版权声明:转载请注明 https://blog.csdn.net/NCC__dapeng/article/details/84029244

今天用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容器内所有的元素全都改变,所以每次都要申请新的内存空间。

猜你喜欢

转载自blog.csdn.net/NCC__dapeng/article/details/84029244
今日推荐