Java数组java
在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型。算法
用类封装数组实现数据结构数组
数据结构必须具备如下基本功能:数据结构
①、如何插入一条新的数据项blog
②、如何寻找某一特定的数据项排序
③、如何删除某一特定的数据项索引
④、如何迭代的访问各个数据项,以便进行显示或其余操做内存
而咱们知道了数组的简单用法,如今用类的思想封装一个数组,实现上面的四个基本功能:get
class EasyAarray{ //数据结构:简易数组 private int[] ins; //一维整型数组 private int footer; //数组下标 private int maxLength; //数组最大长度 public EasyAarray(){ footer=0; maxLength=100; ins=new int[maxLength]; //无参构造默认初始化100长度的数组 } public EasyAarray(int length){ //初始化长度为n的数组 footer=0; maxLength=length; ins=new int[maxLength]; } //取得数组的有效长度 //遍历数组的元素 //添加 //判断元素是否存在 //根据下标查找元素 //修改元素 //删除元素 }
具体代码编写:class
class EasyAarray{ //数据结构:简易无序数组 private int[] ins; //一维整型数组 private int footer; //数组下标 private int maxLength; //数组最大长度 public EasyAarray(){ footer=0; maxLength=100; ins=new int[maxLength]; //无参构造默认初始化100长度的数组 } public EasyAarray(int length){ //初始化长度为n的数组 footer=0; maxLength=length; ins=new int[maxLength]; } //取得数组的有效长度 public int size(){ return footer; } //遍历数组的元素 public void printAarray(){ for(int i=0;i<footer;i++){ System.out.print(ins[i]+" "); } System.out.println(); } //添加 public boolean add(int n){ if(footer>=maxLength){ //若下标超出最大长度,则添加失败(不考虑扩容) return false; } ins[footer++]=n; return true; } //判断元素是否存在 public boolean exist(int n){ for(int i=0;i<=footer;i++){ if(n==ins[i]){ return false; } } return true; } //根据下标(索引)查找元素 public int get(int index){ return ins[index]; } //修改元素(如有重复元素,只修改第一个) public boolean modify(int oldValue,int newValue){ for(int i=0;i<=footer;i++){ if(oldValue==ins[i]){ ins[i]=newValue; return false; } } return true; } //删除元素 public boolean del(int index){ if(!exist(index)){ //若元素不存在,返回false return false; } for(int i=index;i<=footer;i++){ //元素依次前移 ins[i]=ins[i+1]; } footer--; //下标减1 return true; } } public class App { public static void main(String[] args) { EasyAarray ea=new EasyAarray(10); System.out.println(ea.size()); ea.add(4); ea.add(7); ea.add(3); ea.add(1); ea.add(9); ea.del(2); //删除第3个元素(索引是2) ea.printAarray(); } }
数组的局限性
经过上面的代码,咱们发现数组是可以完成一个数据结构具备的全部功能,并且实现起来也不难,可是实际应用中不用它来进行全部的数据存储。
数组(不考虑排序)的局限性分析:
①、插入快,对于无序数组,上面咱们实现的数组就是无序的,即元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增长一个元素很简单,只须要在数组末尾添加元素便可,可是有序数组却不必定了,它须要在指定的位置插入。
②、查找慢,固然若是根据下标来查找是很快的。可是一般咱们都是根据元素值来查找,给定一个元素值,对于无序数组,咱们须要从数组第一个元素开始遍历,知道找到那个元素。有序数组经过特定的算法查找的速度会比无需数组快,后面咱们会讲各类排序算法。
③、删除慢,根据元素值删除,咱们要先找到该元素所处的位置,而后将元素后面的值总体向前面移动一个位置。也须要比较多的时间。
④、数组一旦建立后,大小就固定了,不能动态扩展数组的元素个数。若是初始化你给一个很大的数组大小,那会白白浪费内存空间,若是给小了,后面数据个数增长了又添加不进去了。
很显然,数组虽然插入快,可是查找和删除都比较慢,因此咱们不会用数组来存储全部的数据,那有没有什么数据结构插入、查找、删除都很快,并且还能动态扩展存储个数大小呢,答案是有的,好比ArrayList动态数组就能够动态的扩展存储元素的个数,其余的暂时不须要了解。