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

初级网站开发的自我推荐网页优化最为重要的内容是

初级网站开发的自我推荐,网页优化最为重要的内容是,做短视频网站,做网站借用网络图片不违法吧2.1 数组 (1) 概述 定义 在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识 因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引…

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 BaseAddress+isize 计算出索引 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 字节 markword
  • 4 字节 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 Iterable<Integer> {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(Consumer<Integer> consumer) {for (int i = 0; i < size; i++) {// 提供 array[i]// 返回 voidconsumer.accept(array[i]);}}/*** 遍历方法2 - 迭代器遍历*/@Override//调用java的迭代器遍历public Iterator<Integer> iterator() {return new Iterator<Integer>() {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.wangmingla.cn/news/149478.html

相关文章:

  • 响应式布局如何实现长治网站seo
  • b2b网站优化怎么做新闻20字摘抄大全
  • 移动网站开发服务天津百度推广电话
  • 大型地方门户网站源码弹窗广告最多的网站
  • 做网站开发需要的英语水平百度推广代理加盟
  • 学仿网站文山seo公司
  • 网站安全软件推广app的软文案例
  • 最专业的网站设计平台中国站免费推广入口
  • wordpress悬浮工具安卓手机优化神器
  • 网站 添加备案号又一病毒来了比新冠可怕
  • 网站建设做的人多吗百度seo推广计划类型包含
  • 温州网页模板建站深圳网络推广网站推广
  • 写作网站5妙不写就删除百度指数免费添加
  • 长沙免费网站排名河北网站建设案例
  • 青海高端网站建设多少钱seo关键词推广话术
  • 北京网站seo优化排名推一手新闻发稿平台
  • 天津做网站制作公司百度网站提交入口
  • 遵义住房和城乡建设局官方网站各大网站
  • 蜘蛛网站长工作职责今天重大新闻头条
  • 淘宝网站如何做虚拟机营销软件站
  • 做水果网站用什么域名网址链接
  • 个人网站建设教程网络营销百科
  • 网站防站国内高清视频素材网站推荐
  • 网站栏目建设征求意见成都网络推广优化
  • 一个网站放两个vps网推平台有哪些
  • 企业网站建设知乎广州新闻报道
  • 如何把地图放到自己做的网站上全网整合营销平台
  • 资讯网站如何做聚合百度今日数据统计
  • 外贸有限公司英文网站手机怎么制作网站
  • 在哪些网站做兼职比较可靠上海app定制开发公司