数组的实现

来源:互联网 发布:什么牌子足球鞋知乎 编辑:程序博客网 时间:2024/06/05 08:25

数组是常用的数据结构。几乎每种编程语言里面都有该结构。数组的优点是快速的插入数据,如果下标(索引值)知道,可以很快地存取数据。数组的缺点是查找数据慢,删除数据慢,固定大小。

请看下例:

public class ArrayApp {public static void main(String[] args) {int[] arr;arr = new int[100];int nElems = 0; // 记录元素的个数int j; // 循环变量int searchKey; // 要查找的数据// 插入10个元素arr[0] = 7;arr[1] = 2;arr[2] = 4;arr[3] = 5;arr[4] = 9;arr[5] = 3;arr[6] = 1;arr[7] = 0;arr[8] = 6;arr[9] = 8;nElems = 10;System.out.println("---------遍历-----------");for (j = 0; j < nElems; j++)// 打印所有的数据System.out.print(arr[j] + " ");System.out.println("");System.out.println("-------查找5------------");searchKey = 5;for (j = 0; j < nElems; j++)if (arr[j] == searchKey) // 如果找到跳出循环break;if (j == nElems) // 如果是通过break跳出循环,则n值不等于nElemsSystem.out.println("找不到  " + searchKey); // yeselseSystem.out.println("找到  " + searchKey); // noSystem.out.println("------删除6------------");searchKey = 6; // 删除 6for (j = 0; j < nElems; j++)// 找到6的位置if (arr[j] == searchKey)break;for (int k = j; k < nElems; k++)// 6位置后面的数据依次往前顺移arr[k] = arr[k + 1];nElems--; // 个数减一System.out.println("删除成功");System.out.println("-----遍历---------------");for (j = 0; j < nElems; j++)// 遍历所有数据System.out.print(arr[j] + " ");System.out.println("");} // end main()} // end class ArrayApp

上面的代码类似于C语言的编程风格。在面向对象的编程思维里,应该按模块化的设计方式,用类来描述一个对象的信息,定义方法来封装该对象的功能,定义属性来区别不同的对象。请看下例:

public class TestMyArray {public static void main(String[] args) {MyArray ma = new MyArray();ma.add(3);ma.add(1);ma.add(9);ma.add(5);ma.add(7);System.out.println(ma);// ------------------------------------------------System.out.println("---------------------");if (ma.find(5) != -1)System.out.println("找到5");elseSystem.out.println("没找到5");// -------------------------------------------------System.out.println("---------------------");if (ma.delete(5))System.out.println("删除成功");elseSystem.out.println("删除失败");// -----------------------------------------------System.out.println("---------------------");System.out.println(ma);}// end main()}// end class TestMyArrayclass MyArray {int[] arr; // 声明int类型的数组的引用int nElements; // 记录数组里面元素的个数int size; // 数组的大小public MyArray() {// 默认情况下,该数组对象的大小为10this(10);}public MyArray(int size) {nElements = 0;this.size = size;arr = new int[size];}// 增加的方法public boolean add(int val) {if (nElements < size) {// 判断是否数组已经满了arr[nElements++] = val; // nElements 既是下标,又记录元素个数return true;} else {return false;}// end if}// end add(int val)public int get(int index) {return arr[index];}public int find(int key) { //找到返回改值所在的下标,否则返回-1int i = 0;for (; i < nElements; i++)// 循环查找if (arr[i] == key) // 如果找到跳出循环break;if (i == nElements) // 如果i==nElements表示不是通过break跳出循环的,找不到!return -1; // -1表示找不到elsereturn i; // i是找到值所在的下标}public boolean delete(int key) { // true 表示删除成功,false表示失败int k = find(key); if (k == -1) {return false;} else {for (int i = k; i < nElements; i++)arr[i] = arr[i + 1];nElements--;return true;}}public String toString() {StringBuffer sb = new StringBuffer();for (int i = 0; i < nElements; i++) {if (i != nElements - 1)sb.append(arr[i] + ",");elsesb.append(arr[i]);}// end forreturn sb.toString();}public int getSize(){ // 得到该数组的大小return nElements;}// end getSize()

运行结果

文章出自:http://www.rjpx.net/java-peixun/821.html