Java笔记之结构化数据 01

数组

    我们在编程的过程中,常常需要记录固定数量的信息,还需要能顺序检索信息。这种时候往往会先想到使用数组(Array),数组可以用来存放一个线性数据集合。在Java中数组中,元素必须是同类型的,可以定义基本类型数组或者对象类型数组。对于基本类型的数组(如int[], char[]),存放的是数据。而对象类型数组(Object[]),存放的是引用。

import java.util.*;

public class Array1
{
	public static void main(String[] args)
	{
		// 声明一个整型数组,并分配内存
		int[] month1;
		month1 = new int[12];

		// 简化形式
		int[] month2 = new int[12];

		// 更简单的初始化
		int[] month3 = 
				{
					1, 2, 3, 4,
					5, 6, 7, 8,
					9, 10, 11, 12
				};

		// 对象的数组
		Calendar[] days = new Calendar[10];
		for (int i = 0; i < 10; i++)
			days[i] = Calendar.getInstance();

		// 数组的长度属性 length
		System.out.println("days长度为:" + days.length);

		// 二维数组
		int[][] me = new int[10][];
		for (int i = 0; i < 10; i++)
			me[i] = new int[24];

		System.out.println("me的行数:" + me.length);
		System.out.println("me的列数:" + me[0].length);
	}
}

    在使用数组的过程中,一不留神就很容易就很容易数组溢出,抛出ArrayIndexOutOfBoundsExcetion异常。另外如果数组写满了怎么办?我们可以尝试使用动态扩展数组或者ArrayList。


动态扩展数组

    为了解决上面提出的数组写满问题,我们可以尝试使用动态扩展数组。开始时给数组分配一个大小合适的空间,但是当发现很多数据需要存入且空间不够时,应重新定义一个更大的新数组,并把这些元素复制到新数组。

public class Array2
{
	public static final int INIT = 10;	// 初始容量
	public static final int GROW = 2;	// 扩展倍数

	public static void main(String[] args)
	{
		int[] datas = new int[INIT];

		// 把0到29共30个数存入数组中,数组初始容量只有10
		for (int i = 0; i < 30; i++)
		{
			// 判断数组是否需要扩展
			if (i >= datas.length)
			{
				int[] temp = new int[datas.length * GROW];
				System.arraycopy(datas, 0, temp, 0, datas.length);
				datas = temp;
			}

			datas[i] = i;
		}

		// 查看最终数组的元素
		for (int d : datas)
			System.out.print(d + " ");
	}
}

输出结果:

    这种实现方法在一些简单的或小型线性数据集合中工作良好,但对于结构更加多变复杂的数据可能未必适用。

其他

    最近,自己在学习python,发现了一个比较有趣的框架,我用了几行简单的代码就画了一朵菊花。

from turtle import *
shape("turtle")
color('red', 'yellow')
begin_fill()
while True:
	forward(200)
	left(170)
	if abs(pos()) < 1: 
		break
end_fill()
done()


你可能感兴趣的:(学习笔记,Java)