当前位置: 首页 > news >正文

湖北网站建设哪家好网站建设預算

湖北网站建设哪家好,网站建设預算,深圳十大外包软件公司,做虾苗网站有哪些流程优质博文:IT-BLOG-CN 一、简介 数组Array是一种线性表数据结构,它用一组连续的内存空间,存储一组具有相同类型的数据。 数组因具有连续的内存空间的特点,数据拥有非常高效率的“随机访问”,时间复杂度为O(1)。但因要保…

优质博文:IT-BLOG-CN

一、简介

数组Array是一种线性表数据结构,它用一组连续的内存空间,存储一组具有相同类型的数据

数组因具有连续的内存空间的特点,数据拥有非常高效率的“随机访问”,时间复杂度为O(1)。但因要保持这个连续的内存空间,导致数组在删除或插入操作的时非常低效。因为数组为了保持连续性,必然会涉及大量数据的迁移,这个是非常消耗时间的,平均时间复杂度为O(N)

二、数组的随机访问

数组的随机访问是有个寻址公式的,上问中我们提到过数组是用一组连续的内存空间存储数据元素的,然而每个内存单元都有自己的地址(在计算机里面就是通过这个地址访问数据的),又加上每个内存单元的大小都是一样的,这样就很容易得到一个公式了,如下所示:

a[i]_address = base_address + i * data_type_size

我们来简单解释一下上述公式,其中data_type_size表示数组中每个元素的大小,base_address表示内存块的首地址,i表示数组下标。

三、数组的基本操作

【1】创建数组

public class MyArray {      private int[] array;     // 数组大小     private int size;           public MyArray(int capacity) {         this.size = 0;         this.array = new int[capacity];     }      
}

【2】读取元素: 我们知道数组在内存中是连续存储的,所以根据上文的寻址公式可以知道,我们可以根据数组下标i快速定位到对应的元素。

int[] array={1,2,3,4,5,6}; 
System.out.println(array[1]);  // 输出的是2  因为数组的下标是从0开始的。

【3】更新元素: 我们可以根据数组下标快速查找到对应元素。那么同样道理,我们可以根据数组下标i快速更新元素,这中间涉及两个过程,首先就是找到数组下标i对应的数据元素A,然后将新的数据元素B赋值给A即完成更新。

int[] array={1,2,3,4,5,6}; 
System.out.println(array[1]);  // 输出的是2  
//更新数组下标为 1 的数组元素 
array[1]=7; 
System.out.println(array[1]); // 输出的是7

【3】插入元素:相比读取、更新操作,插入元素稍微复杂一些,分为以下两种情况:

尾部插入: 首先,我们看看尾部插入,这种情况很简单,在数组的最后新增一个新的元素,此时对于原数组来说没有任何影响,时间复杂度为0(1)。如下图所示:

中间插入: 如果在数组的中间位置插入元素的话,此时会对插入元素位置之后的元素产生影响,也就是这些数据需要向后依次挪动一个位置。如下图所示:

/**  * 插入元素* @param index  待插入的位置  * @param element 待插入的元素 */ 
public void insert(int index, int element){     if(index < 0 || index > size) {        throw new IndexOutOfBoundsException("超过数组容量 ! 插入失败!");      }     // 从左到右,将元素向右移动一位     for (int i = size-1; i > index; i--) {array[i+1] = array[i];}     // 此时index这个位置已经腾空了,可以放进入element     array[index]=element;     //数组中元素个数+1     size++; 
}

【4】删除元素: 删除元素和插入元素类似,如果我们删除第k个位置的数据,为了内存的连续性,同样会涉及数据的挪动。如下图所示:

数组
/**  * 根据数组下标删除元素* @param index 数组下标 * @return  */ 
public int delete(int index) {     if (index < 0 || index > size) {         throw new IndexOutOfBoundsException("已经超过数组容量 ! 插入失败!");     }     int deleteElement = array[index];     // 从左到右,将元素向左移动一位     for (int i = index; i < size - 1; i++) {         array[i] = array[i + 1];     }     size--;     return deleteElement; 
}

四、数组扩容

因为数组的长度在创建的时候已经确定了,当插入元素的时候如果数组已经满了,是没办法插入成功的。这个时候就要考虑数组扩容的问题了,那么该如何实现扩容呢?

其实我们可以这样,比如此时的数组是A, A已经满了,我们再创建一个数组B且数组长度是A的2倍,然后我们将数组A的元素全部放到数组B中,这样就完成了数组扩容了。

/** 数组扩容为原数组的二倍 **/ 
public void resize(){  int[] newArray = new int[array.length * 2];  System.arraycopy(array, 0, newArray, 0, array.length);  // 把从索引0(第一个0)开始的array.length个数字复制到索引为0(第二个0)的位置上  array = newArray;
}
http://www.yayakq.cn/news/681495/

相关文章:

  • 最好的网站建设推广学做小程序需要哪些基础
  • 网站制作设计发展前景温州网站建设wmwl
  • 微网站建设使用程序巢湖网站建设电话
  • 惠州手机网站商城建设狮山建网站
  • 广州icp网站测评无代码开发平台的利与弊
  • 帝国cms小说网站模板下载地址南宁市建设处网站
  • 网站如何做等保备案网站建设费用价格表
  • 什么好的主题做网站哪里有做ppt的网站
  • 广州网站制作怎么选任经理 徐州网站建设
  • 青岛网站建设公司在哪如何做班级网站
  • 构建网站系统做一个高端网站
  • 毕业设计商城网站开发做滋补品销售有什么网站
  • 江阴网站开发门户网站建设情况简介
  • 公司网站公众号维护怎么做wordpress 标签模板下载
  • 校园二手网站开发的意义广西工程建设质量管理协会网站
  • 电商网站的银行支付接入该怎么做百度提交
  • 网站上线 串词wordpress word上传
  • 常州交通建设管理有限公司网站北京广告设计公司
  • 柯林建站程序大宗商品现货交易规则
  • 低功耗集成主板做网站让顾客进店的100条方法
  • 网站建设_app开发赣州网红打卡旅游景点
  • 查看一个网站的源代码做评价苏州企业排名
  • 网站建设功能的策划书网站开发职业要求
  • 网站建设平台官网河间米各庄视频推广软件
  • 南山网站优化短视频拍摄剪辑培训班
  • 遂宁网站建设公司哪家好腾讯云做视频网站
  • 云南省建设考试中心网站怎样找网站
  • 母版页做网站例子手机上怎么安装wordpress
  • 网站推广文案wordpress html5 主题
  • 浙江公司网站建设推广手工制作小玩具简单又好玩