国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

數(shù)據(jù)結(jié)構(gòu)java版之《數(shù)組》

2019-11-06 06:16:23
字體:
供稿:網(wǎng)友

本篇文章,使用java語言,封裝一個(gè)數(shù)組工具類。不使用系統(tǒng)提供的api。

包括一些數(shù)組的增刪改查,有序添加,二分查找等功能。

package ch01;public class MyArray {	// 底層內(nèi)部的數(shù)組	PRivate long[] arr;	// 數(shù)組容量,記錄用戶使用數(shù)組的長度	private int elements;	/**	 * 無參構(gòu)造,設(shè)置默認(rèn)數(shù)組大小。	 */	public MyArray() {		arr = new long[50];	}	/**	 * 帶參構(gòu)造,用戶指定數(shù)組大小	 * 	 * @param size	 */	public MyArray(int size) {		arr = new long[size];	}	/**	 * 往數(shù)組增加元素(增)	 */	public void insert(int value) {		arr[elements] = value;		// 添加元素,容器記錄值也要增加		elements++;	}	/**	 * 在指定位置添加元素	 * 	 * @param index	 * @param value	 */	public void insert(int index, int value) {		// 創(chuàng)建新的數(shù)組,比原來數(shù)組長度多1		long[] tempArray = new long[elements + 1];		//新插入的位置,就制定添加在索引處		tempArray[index] = value;		// 判斷數(shù)組角標(biāo)越界		if (index < 0 || index >= elements) {			throw new ArrayIndexOutOfBoundsException();		} else {			for (int i = 0; i < elements; i++) {				if (i < index) {					//原來數(shù)組索引左側(cè)全部給新數(shù)組左側(cè)					tempArray[i] = arr[i];				} else {					//原來數(shù)組索引位置往后全部賦值給新數(shù)組索引后邊的位置					tempArray[i + 1] = arr[i];				}			}		}		// 把最新數(shù)組賦值給最初的數(shù)組		arr = tempArray;		elements++;	}		/**	 * 添加的數(shù)據(jù),默認(rèn)自然排序	 * @param value	 */	public void insertOrder(long value){		int i = 0;		for (i = 0; i < elements; i++) {			//比較,添加的元素第一次小于數(shù)組位置元素時(shí),跳出循環(huán),該i值位置就是添加元素的位置			if(value < arr[i]){				break;//跳出循環(huán)后,i的值保留,就是要添加數(shù)據(jù)的數(shù)組索引位置			}		}				//倒著遍歷		for (int j = elements; j > i; j--) {			//原來數(shù)組i位置以后的數(shù)組,重新 以次 往后一個(gè)位置賦值。這樣才可以保證添加元素在最小位置,保證排序			arr[j] = arr[j-1];		}				//把添加元素,加載指定位置		arr[i] = value;		//添加一次,容器標(biāo)記加一		elements++;	}	/**	 * 遍歷數(shù)組	 */	public void disPlay() {		System.out.print("[");		for (int i = 0; i < elements; i++) {			if (i == elements - 1) {				System.out.println(arr[i] + "]");			} else {				System.out.print(arr[i] + " ");			}		}	}	/**	 * 根據(jù)索引,獲取索引位置的值	 * 	 * @param index	 * @return	 */	public long get(int index) {		// 判斷數(shù)組角標(biāo)越界		if (index < 0 || index >= elements) {			throw new ArrayIndexOutOfBoundsException();		} else {			return arr[index];		}	}	/**	 * 刪除指定索引位置的值	 * 	 * @param index	 */	public void remove(int index) {		// 判斷數(shù)組角標(biāo)越界		if (index < 0 || index >= elements) {			throw new ArrayIndexOutOfBoundsException();		} else {			for (int i = index; i < elements; i++) {				// 把index位置的數(shù)據(jù)替換掉了				arr[i] = arr[i + 1];			}			elements--;		}	}	/**	 * 修改某個(gè)位置的數(shù)據(jù)	 * 	 * @param index	 */	public void upData(int index, int value) {		// 判斷數(shù)組角標(biāo)越界		if (index < 0 || index >= elements) {			throw new ArrayIndexOutOfBoundsException();		} else {			arr[index] = value;		}	}	/**	 * 根據(jù)值找出對應(yīng)的索引,找不到就返回-1	 * 線性查找。	 * @param value	 * @return	 */	public int search(int value) {		int index = -1;		for (int i = 0; i < elements; i++) {			if (arr[i] == value) {				index = i;			}		}		return index;	}		/**	 * 二分查找,超找元素的索引。	 * 前提:必須是有序數(shù)組。無需數(shù)組通過上述線性查找方式	 * @param value	 * @return	 */	public int binarySearch(long value){		/*1、記錄最大索引、最小索引		2、計(jì)算中間索引		3、比較中間索引值與添加元素		        相等  :  直接返回		        不相同		            大了  往左查找   max = middle-1;		            小了  往右查找   min = middle+1;		返回2		當(dāng)min > max 的時(shí)候,跳出循環(huán)表示查找不到數(shù)據(jù)。返回-1。*/		int max = elements-1;		int min = 0;		int middle = 0;		while(true){			middle = (max+min)/2;			// 相等  :  直接返回			if(arr[middle] == value){				return middle;			}else if(arr[middle] > value){				//大了 左邊查找				max = middle -1;			}else {				//小了  往右查找				min = middle +1;			}						if(min > max){				return -1;			}		}	}}

微信搜索公眾號    codeHoward   在公眾號可以最早獲取博客最新更新消息,以及了解一些大公司面試經(jīng)驗(yàn)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 色达县| 安溪县| 赞皇县| 新余市| 新干县| 甘洛县| 上犹县| 上栗县| 秀山| 江山市| 北京市| 嘉峪关市| 广宗县| 大庆市| 宿州市| 铜梁县| 平遥县| 姜堰市| 兴山县| 泰兴市| 郓城县| 黔西| 长汀县| 施秉县| 大悟县| 昌宁县| 孟连| 基隆市| 和田市| 岐山县| 山东省| 绥芬河市| 湾仔区| 沁源县| 澄迈县| 徐水县| 河间市| 永昌县| 临安市| 胶南市| 鄂托克前旗|