关于数组的基础知识
----数组对于每一门编程语言来说都是重要的数据结构之一,用来存储固定大小的同类型元素,对数组的操作主要是查找,赋值,增加、删除,不同语言对数组的实现及处理也不尽相同,这里用不同的方法实现对数组的查找,赋值,增加、删除。
- 数组的查找:线性查找和二分查找,下一篇文章给出;
- 数组赋值增加:先判断是否达到数组最大长度,若小于最大长度,则直接在最后添加数据;
- 数组删除:1、根据下标x:直接找到x所在位置,将x+1的值附给x,之后一次类推往前移动一个位置,最后将数组长度减一;2、根据数据值:将数组的每个数据与要删除的数据对比,找到后和根据下标x删除一样,将后面的向前移动一个,并将数组长度减一;
- 一下例子以long类型的数组为例,此外还可定义int、string等类型的数组。
1.老式面向过程的数组
package arrayapplication;
public class ArrayApplication {
public static void main(String[] args) {
long[] arr; //声明数组
arr = new long[100]; //创建数组
int nElems = 0; //数组的个数
int j = 0; //循环变量
long searchKey = 0; //查找和删除的元素
//对数组进行赋值
arr[0] = 90;
arr[1] = 91;
arr[2] = 92;
arr[3] = 93;
arr[4] = 94;
arr[5] = 95;
arr[6] = 96;
arr[7] = 97;
arr[8] = 98;
arr[9] = 99;
nElems = 10;
//显示所有元素
for(j =0;j<nElems;j++){
System.out.print(arr[j]+" ");
}
System.out.println();
//查找99
searchKey = 89;
for(j = 0; j<nElems;j++)
if(arr[j]==searchKey) break;
if(j==nElems)
System.out.println("Can't Found:"+searchKey);
else
System.out.println("Found:"+searchKey);
//删除98
searchKey = 98;
for(j = 0; j<nElems;j++)
if(arr[j]==searchKey) break;
if(j==nElems)
System.out.println("Can't Found:"+searchKey);
else{
for(int k = j; k<nElems;k++)
arr[k]=arr[k+1];
nElems--;
}
//显示所有元素
for(j =0;j<nElems;j++){
System.out.print(arr[j]+" ");
}
}
}
2.面向对象简单数组
创建一个LowArray数组类,对其功能进行封装(这里仅仅简单封装了增加和查找功能):
package arrayapplication;
public class LowArray {
private long[] arr; //声明数组
public LowArray(int size){
arr = new long[size]; //对数组进行初始化
}
//将数据存入数组
public void setElems(int index, long value){
arr[index] = value;
}
//根据下标获取数组
public long getElems(int index){
return arr[index];
}
}
创建一个入口类对上个类的功能进行实现:
package arrayapplication;
public class LowArrayApp {
public static void main(String[] args){
int nElems = 10; //数组大小
LowArray arr = new LowArray(nElems ); //创建LowArray的实例
int j = 0; //循环变量
long searchKey = 0; //查找、删除的数据
//对数组赋值setElems(index, value)
arr.setElems(0, 90);
arr.setElems(1, 91);
arr.setElems(2, 92);
arr.setElems(3, 93);
arr.setElems(4, 94);
arr.setElems(5, 95);
arr.setElems(6, 96);
arr.setElems(7, 97);
arr.setElems(8, 98);
arr.setElems(9, 99);
//显示所有
for(j=0; j<nElems;j++)
System.out.print(arr.getElems(j)+" ");
System.out.println();
//查找
searchKey = 98;
for(j = 0; j<nElems;j++)
if(arr.getElems(j) == searchKey) break;
if(j==nElems)
System.out.println("Can't Found:"+searchKey);
else
System.out.println("Found:"+searchKey);
//删除
searchKey = 98;
for(j = 0; j<nElems;j++)
if(arr.getElems(j) == searchKey) break;
if(j==nElems)
System.out.println("Can't Found:"+searchKey);
else{
for(int k = j; k<nElems;k++)
arr.setElems(k, arr.getElems(k));
nElems--;
}
//显示所有
for(j=0; j<nElems;j++)
System.out.print(arr.getElems(j)+" ");
System.out.println();
}
}
3.面向对象功能复杂数组
创建一个HighArray类,对数组功能进行封装:
package arrayapplication;
public class HighArray {
private long[] arr; //声明数组
private int nElems; //数组大小
private int j; //循环变量
public HighArray(int max){
arr = new long[max]; //实例化数组
nElems = 0;
}
//查找功能
public boolean find(long searchKey){
for(j = 0; j<nElems;j++)
if(arr[j] == searchKey) break;
if(j==nElems)
return false;
else
return true;
}
//插入功能
public void insert(long value){
arr[nElems] = value;
nElems++;
}
//删除功能
public boolean delete(long searchKey){
for(j = 0; j<nElems;j++)
if(arr[j] == searchKey) break;
if(j==nElems)
return false;
else{
for(int k = j; k<nElems;k++)
arr[k] = arr[k+1];
nElems--;
}
return true;
}
//显示所有
public void display(){
for(j=0; j<nElems;j++)
System.out.print(arr[j]+" ");
System.out.println();
}
}
下一篇文章记录数组的查找方法(线性查找和二分查找)和有序数组。