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

红谷滩园林建设集团网站济南房产信息网站官网

红谷滩园林建设集团网站,济南房产信息网站官网,网搜网,运动分类的网站设计论文2.1 数组 #xff08;1) 概述 定义 在计算机科学中#xff0c;数组是由一组元素#xff08;值或变量#xff09;组成的数据结构#xff0c;每个元素有至少一个索引或键来标识 因为数组内的元素是连续存储的#xff0c;所以数组中元素的地址#xff0c;可以通过其索引…2.1 数组 1) 概述 定义 在计算机科学中数组是由一组元素值或变量组成的数据结构每个元素有至少一个索引或键来标识 因为数组内的元素是连续存储的所以数组中元素的地址可以通过其索引计算出来例如 int[] array {1,2,3,4,5}知道了数组的数据起始地址 B a s e A d d r e s s BaseAddress BaseAddress就可以由公式 B a s e A d d r e s s i ∗ s i z e BaseAddress i * size BaseAddressi∗size 计算出索引 i i i 元素的地址 i i i 即索引在 Java、C 等语言都是从 0 开始 s i z e size size 是每个元素占用字节例如 i n t int int 占 4 4 4 d o u b l e double double 占 8 8 8 小测试 byte[] array {1,2,3,4,5}已知 array 的数据的起始地址是 0x7138f94c8那么元素 3 的地址是什么 答0x7138f94c8 2 * 1 0x7138f94ca 空间占用 Java 中数组结构为 8 字节 markword4 字节 class 指针压缩 class 指针的情况4 字节 数组大小决定了数组最大容量是 2 32 2^{32} 232数组元素 对齐字节java 中所有对象大小都是 8 字节的整数倍[^12]不足的要用对齐字节补足 例如 int[] array {1, 2, 3, 4, 5};的大小为 40 个字节组成如下 8 4 4 5*4 4(alignment)随机访问性能 即根据索引查找元素时间复杂度是 O ( 1 ) O(1) O(1) 2) 动态数组 java 版本 public class DynamicArray implements IterableInteger {private int size 0; // 逻辑大小private int capacity 8; // 容量private int[] array {};/*** 向最后位置 [size] 添加元素** param element 待添加元素*///在数组末尾添加元素public void addLast(int element) {add(size, element);}/*** 向 [0 .. size] 位置添加元素** param index 索引位置* param element 待添加元素*///在指定位置index添加元素public void add(int index, int element) {checkAndGrow();// 添加逻辑if (index 0 index size) {// 向后挪动, 空出待插入位置System.arraycopy(array, index,array, index 1, size - index);}array[index] element;size;} //如果容量为0则创建一个初始容量为8的数组如果大小超过容量则进行容量的1.5倍扩容private void checkAndGrow() {// 容量检查if (size 0) {array new int[capacity];} else if (size capacity) {// 进行扩容, 1.5 1.618 2//移位运算符1即除以2然后再加上之前的容量即为1.5倍扩容capacity capacity 1;int[] newArray new int[capacity];//扩容逻辑先复制原本的数组里面的元素再创建一个新的数组容量为原数组的1.5倍//然后把复制的元素复制到新数组里面之后再进行元素的添加System.arraycopy(array, 0,newArray, 0, size);array newArray;}}/*** 从 [0 .. size) 范围删除元素** param index 索引位置* return 被删除元素*/public int remove(int index) { // [0..size)int removed array[index];//删除逻辑指定删除元素的索引1开始的元素以及后面的所有元素复制一遍把指定元素移除后//再将复制的元素放进来也就是后面的元素往前面移动一位if (index size - 1) {// 向前挪动System.arraycopy(array, index 1,array, index, size - index - 1);}size--;return removed;}/*** 查询元素** param index 索引位置, 在 [0..size) 区间内* return 该索引位置的元素*/public int get(int index) {//直接返回查询元素的索引return array[index];}/*** 遍历方法1** param consumer 遍历要执行的操作, 入参: 每个元素*///调用java的Consumer接口然后是包装的泛型整型public void foreach(ConsumerInteger consumer) {for (int i 0; i size; i) {// 提供 array[i]// 返回 voidconsumer.accept(array[i]);}}/*** 遍历方法2 - 迭代器遍历*/Override//调用java的迭代器遍历public IteratorInteger iterator() {return new IteratorInteger() {int i 0;Overridepublic boolean hasNext() { // 有没有下一个元素return i size;}Overridepublic Integer next() { // 返回当前元素,并移动到下一个元素return array[i];}};}/*** 遍历方法3 - stream 遍历** return stream 流*///调用java的stream流遍历public IntStream stream() {return IntStream.of(Arrays.copyOfRange(array, 0, size));} }这些方法实现都简化了 index 的有效性判断假设输入的 index 都是合法的 测试代码时养成用断言assert去判断而不是将其打印出来 插入或删除性能 头部位置时间复杂度是 O ( n ) O(n) O(n) 中间位置时间复杂度是 O ( n ) O(n) O(n) 尾部位置时间复杂度是 O ( 1 ) O(1) O(1)均摊来说
http://www.hkea.cn/news/14288402/

相关文章:

  • 石家庄万达网站制作敬请期待换个说法
  • 淘宝网站是怎么做的吗建立网站需要多少钱费用
  • 龙华营销型网站制作网站微信公众号链接怎么做
  • 美工好的网站凡科手机网站建设开发
  • qml 网站开发wordpress 开源主题
  • 手机传奇手游发布网站成都动力无限网站推广
  • 建设网站赚广告费是否可行加盟培训网站建设
  • 电商网站管理系统模板下载无需下载国外黄冈网站推广
  • 做百科网站广州环保网站建设
  • 网站降权不更新文章可以吗库存管理软件有哪些
  • 网站的主页按钮怎么做上海城隍庙旅游区
  • 氧气瓶网站建设周口哪里做网站
  • 富平网站建设莱芜雪野湖介绍
  • 网站标题关键优化开发一个婚恋app需要多少钱
  • 电商网站国内外需求分析公司注册资金实缴后多久可以取出
  • wordpress建站平台网页浏览器没有声音
  • 做网站从哪里找货源公众号排版
  • 企业网站开发的目的做网站要那些设备
  • 网站目录在哪里中国建筑信息平台
  • 免费家具网站模板深圳珠宝网站建设分析报告
  • 制作网站管理系统聚名网备案域名购买
  • 石家庄网站快速排名文昌品牌网站建设费用
  • 江宁区住房和城乡建设厅网站南京淄博网站建设方案
  • 长沙网站建设网网站建设系统怎么样
  • 建设一个游戏网站需要多少钱专门做试题的网站
  • logo设计制作网站国外赚钱平台
  • 加盟网站制作公司wordpress 专题插件
  • 商城网站互动性做公司英文网站
  • 重庆网站关键词优化推广网站搜索排名
  • 上海网站制作 公司自己做网站不推广