数据结构的Java实现(二)—— 数组

在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。


介绍

在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型(Object类型数组除外)。

①、数组的声明:

// 方式一
类型[] 名称 = new 类型[长度];

// 方式二
类型[] 名称 = {元素1,元素2,……};

②、数组的赋值与访问:

// 数组的下标从0开始
int[] arr = new arr[5];

// 赋值
arr[0] = 1;

// 访问
System.out.println(arr[0]);

③、数组的遍历:

// 方式一
for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

// 方式二
for(int i : arr) {
    System.out.println(i);
}

用类数组进行封装

package yrwan01;

public class MyArray {
	private int[] arr;// 数组的声明
	private int elems;// 数组的实际长度
	private int length;// 数组的最大长度

	// 构造长度为50的数组
	public MyArray() {
		elems = 0;
		length = 50;
		arr = new int[length];
	}

	// 构造长度为length的数组
	public MyArray(int length) {
		elems = 0;
		this.length = length;
		arr = new int[length];
	}

	// 返回数组元素的个数
	public int getSize() {
		return elems;
	}

	// 添加元素
	public boolean add(int value) {
		if (elems == length) {
			return false;
		} else {
			arr[elems] = value;
			elems++;
		}
		return true;
	}

	// 返回指定位置的元素
	public int get(int index) {
		if (index < 0 || index > elems) {
			return -1;
		}
		return arr[index];
	}

	// 返回指定元素的位置
	public int findIndex(int value) {
		int i;
		for (i = 0; i < elems; i++) {
			if (arr[i] == value) {
				break;
			}
		}
		if (i == value) {
			return -1;
		}
		return i;
	}

	// 删除指定元素
	public boolean delete(int value) {
		int i = findIndex(value);
		if (i == -1) {
			return false;
		} else {
			if (i == elems) {
				elems--;
			} else {
				for (int j = i; j < elems - 1; j++) {
					arr[j] = arr[j + 1];
				}
				elems--;
			}
			return true;
		}
	}

	// 将oldValue更新为newValue
	public boolean modify(int oldValue, int newValue) {
		int i = findIndex(oldValue);
		if (i == -1) {
			return false;
		} else {
			arr[i] = newValue;
			return true;
		}
	}

	// 遍历数组
	public void display() {
		for (int i : arr) {
			System.out.println(i);
		}
	}
}

测试类:

package yrwan01;

import org.junit.Test;

public class MyArrayTest {
	@Test
	public void myArrayTest() {
		MyArray array = new MyArray(4);
		array.add(1);
		array.add(2);
		array.add(3);
		array.add(4);
		// 显示数组元素
		array.display();
		// 根据下标为0的元素
		System.out.println("下标为0的元素:" + array.get(0));
		// 删除4的元素
		array.delete(4);
		// 将元素3修改为33
		array.modify(3, 30);
		array.display();
	}
}

总结

通过代码,可发现数组能完成一个数据结构的所有功能,并且实现起来也很容易,既然数组能完成所有的工作,那实际应用中为什么不用数组进行所有的数据存储呢?原因如下。

  数组的局限性:

  ①、插入快,对于无序数组,即元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增加一个元素很简单,只需要在数组末尾添加元素即可。但是有序数组却不一样,它需要在指定的位置插入。

  ②、查找慢,当然如果根据下标来查找是很快的。但是通常都是根据元素值来查找,给定一个元素值,对于无序数组,需要从数组第一个元素开始遍历,直到找到那个元素。有序数组通过特定的算法查找的速度会比无需数组快。

  ③、删除慢,根据元素值删除,要先找到该元素所处的位置,然后将元素后面的值整体向前面移动一个位置。

  ④、数组一旦创建后,大小就固定了,不能动态扩展数组的元素个数。

  很显然,数组虽然插入快,但是查找和删除都比较慢,而且扩展性差,所以一般不会用数组来存储数据。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值