欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组的基本操作

程序员文章站 2024-03-04 15:14:47
...

这一章记录下java数组的基本操作,如增、删、改、查等。。

准备工作:

新建一个数组类LuLuArray,里面封装了一个数组,在里面实现增删改查的操作。

代码如下:

public class LuluArray {

	//声明一个long类型的数组
	private long[] longArr;
	//表示该数组的有效长度
	private int arrLength;

    /**
	 * 数组类的构造函数
	 */
	public LuluArray(int maxSize) {
		longArr = new long[maxSize];
	}

	
	
}

1、新增操作

1、在数组中无序添加元素

/**
	 * 无序添加数据
	 * @param value
	 */
	public void add(long value) {
		longArr[arrLength] = value;
		arrLength++;
	}

每新添加一个元素,数组长度arrLength加一

2、在数组中有序添加元素

/**
	 * |有序添加数据
	 * @param value
	 */
	public void orderAdd(long value) {
		int i;
		//找缝隙,找到比插入值大的位置
		for(i=0;i<arrLength;i++) {
			if(longArr[i]>value) {
				break;
			}
		}
		//从新值插入的位置开始,后面的值都往后挪一位
		for(int j=arrLength;j>i;j--) {
			longArr[j] = longArr[j-1];
		}
		longArr[i] = value;
		arrLength++;
		
	}

在该数组现有的元素中遍历查找比插入值大的元素,在该元素的前面位置进行插入,插入位置后面的元素的数组下表都进行加一,数组长度加一。如下图所示

数组的基本操作

2、删除操作

/**
	 * 根据索引删除数据
	 * @param index
	 */
	public void delete(int index) {
		if(index<0 || index>=arrLength) {
			throw new ArrayIndexOutOfBoundsException();
		}else {
			//在index开始往后的数值都往前面挪一位;
		
			for(int i=index; i<arrLength; i++) {
				longArr[i] = longArr[i+1];
			}
			//索引减一
			arrLength--;
		}
	}

在参数index位置往后的元素都往前挪一位,数组长度减一

数组的基本操作

3、修改操作

/**
	 * 更新数据
	 * @param index
	 * @param newValue
	 */
	public void update(int index,long newValue) {
		if(index<0 || index>=arrLength) {
			throw new ArrayIndexOutOfBoundsException();
		}else {
			longArr[index] = newValue;
		}
	}

根据传入的数组下标和新值进行替换。

4、查找操作

1、根据数组下标查找数据

/**
	 * 根据索引查询数据
	 * @param index
	 * @return
	 */
	public long getData(int index) {
		if(index<0 || index>=arrLength) {
			throw new ArrayIndexOutOfBoundsException();
		}else {
			return longArr[index];
		}
	}

2、根据值查找数组位置

/**
	 * 根据值查找索引
	 * @param value
	 * @return
	 */
	public int search(long value) {
		int i;
		for(i=0;i<arrLength;i++) {
			if(longArr[i] == value) {
				break;
			}	
		}
		//如果i的值等于arrLength说明没有要查找的值
		if(i == arrLength) {
			return -1;
		}else {
			return i;
		}
		
	}

根据参数传入的值对数组进行遍历,查找到返回数组下标,找不到返回-1

3、二分法查找

/**
	 * 二分查找法
	 * @param value
	 * @return
	 */
	public int midlSearch(long value) {
		int middle;
		int begin = 0;
		int end = arrLength;
		
		while(true) {
			middle = (begin+end)/2;
			if(longArr[middle] == value) {
				return middle;
			}else if(begin>end) {
				return -1;
			}else {
				if(longArr[middle] > value) {
					end = middle-1;
				}else {
					begin = middle+1;
				}
			}
		}
		
	}

二分法查找的前提是该数组的元素都是有序的。首先找到该数组的中间值跟参数传入值进行比较。如果参数比中间值大,则在后半块按照上述步骤继续二分法查找,一直找到为止。如果参数比中间值小,则在前半块进行查找。

数组的基本操作