一、数组的定义
(1)、int [] array = new int[length];
(2)、int [] array = new int{1, 2, 3};
二、数组的封装:增、删、改、查
package com.company.data;
public class MyArray {
private int mArray[] =null;
private int elems;
private int length;
public MyArray() {
this(0);
}
public MyArray(int length) {
this.length = length;
this.elems =0;
this.mArray =new int[this.length];
}
public int getSize() {
return this.elems;
}
public boolean add(int value) {
if (this.elems >=this.length) {
return false;
}else {
mArray[this.elems++] = value;
return true;
}
}
public int get(int i) {
if (i >=this.elems || i <0) {
throw new IndexOutOfBoundsException("i >= this.elems || i < 0");
}else {
return mArray[i];
}
}
public void showArray() {
for (int i =0; i
System.out.println("mArray [" + i +"] = " +mArray[i]);
}
}
public int find(int value) {
int i;
for (i =0; i
if (mArray[i] == value) {
break;
}
}
if (i ==this.elems) {
return -1;
}
return i;
}
public boolean delete(int value) {
int k = find(value);
if (k == -1) {
return false;
}else {
if (k ==this.elems -1) {
this.elems--;
}else {
for (int i = k; i
mArray[i] =mArray[i +1];
this.elems--;
}
}
return true;
}
}
public boolean modify(int oldValue,int newValue) {
int i = find(oldValue);
if (i == -1) {
System.out.println("需要修改的数据不存在");
return false;
}else {
mArray[i] = newValue;
return true;
}
}
}
三、数组的局限性
通过上面的代码,我们发现数组是能完成一个数据结构所有的功能的,而且实现起来也不难,那数据既然能完成所有的工作,我们实际应用中为啥不用它来进行所有的数据存储呢?那肯定是有原因呢。
数组的局限性分析:
①、插入快,对于无序数组,上面我们实现的数组就是无序的,即元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增加一个元素很简单,只需要在数组末尾添加元素即可,但是有序数组却不一定了,它需要在指定的位置插入。
②、查找慢,当然如果根据下标来查找是很快的。但是通常我们都是根据元素值来查找,给定一个元素值,对于无序数组,我们需要从数组第一个元素开始遍历,知道找到那个元素。有序数组通过特定的算法查找的速度会比无需数组快,后面我们会讲各种排序算法。
③、删除慢,根据元素值删除,我们要先找到该元素所处的位置,然后将元素后面的值整体向前面移动一个位置。也需要比较多的时间。
④、数组一旦创建后,大小就固定了,不能动态扩展数组的元素个数。如果初始化你给一个很大的数组大小,那会白白浪费内存空间,如果给小了,后面数据个数增加了又添加不进去了。
很显然,数组虽然插入快,但是查找和删除都比较慢,所以我们不会用数组来存储所有的数据,那有没有什么数据结构插入、查找、删除都很快,而且还能动态扩展存储个数大小呢,答案是有的,但是这是建立在很复杂的算法基础上,后面我们也会详细讲解。
网友评论