在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
介绍
在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();
}
}
总结
通过代码,可发现数组能完成一个数据结构的所有功能,并且实现起来也很容易,既然数组能完成所有的工作,那实际应用中为什么不用数组进行所有的数据存储呢?原因如下。
数组的局限性:
①、插入快,对于无序数组,即元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增加一个元素很简单,只需要在数组末尾添加元素即可。但是有序数组却不一样,它需要在指定的位置插入。
②、查找慢,当然如果根据下标来查找是很快的。但是通常都是根据元素值来查找,给定一个元素值,对于无序数组,需要从数组第一个元素开始遍历,直到找到那个元素。有序数组通过特定的算法查找的速度会比无需数组快。
③、删除慢,根据元素值删除,要先找到该元素所处的位置,然后将元素后面的值整体向前面移动一个位置。
④、数组一旦创建后,大小就固定了,不能动态扩展数组的元素个数。
很显然,数组虽然插入快,但是查找和删除都比较慢,而且扩展性差,所以一般不会用数组来存储数据。