【算法修炼之道】——数组

版权声明:希望各位能遵守各自内心的原则 https://blog.csdn.net/weixin_40918067/article/details/82142323

数组

什么是数组???——》是有序的元素序列;同时数组是对象数据类型;也是一种数据结构;

那数据结构又是什么呢???——》是指相互有关联的数据元素的集合;

数据结构有分类吗???——》数据的逻辑结构和数据的存储结构;

逻辑结构有几类???——》其分为线性结构和非线性结构;

存储结构有几类???——》顺序、链接、 索引等存储结构;

什么是元素???——》其中组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量;

那么如何区分序列中的元素???——》其实是使用数字编号区分数组的各个元素,可称为下标;

到了这里,相信大家对于什么是数组及其包含的元素也有了一定的了解;但是,你们知道为什么要数组吗???

——》是把具有相同类型的若干元素按无序的形式组织起来的一种形式;

也就是说,数组是用于存储多个相同类型数据的集合;

数组可以存储很多种数据,也就是说数组分很多种类型???——》数值数组、字符数组、指针数组、结构数组等;

每个东西都有特点,那么数组有什么特点呢???——》

特点

  1. 数组是相同数据类型的元素的集合。
  2. 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起;
  3. 数组元素用整个数组的名字和它自己在数组中的顺序位置来表示;
  4. 随机访问速度快???——》数据是连续的???——》数组有上界和下界,且数组的元素在上下界内是连续的;(内存地址的连续性的问题)
  5. 相对于链表,其内存空间占用的少???——》链表节点会附加上一块或两块下一个节点的信息,但是数组在建立时就固定了;但也有可能会因为建立的数组过大或不足引起内存上的问题;

使用数组有什么要注意的呢???

  1. 不能直接用equals()方法比较数组内容???——》因为没有override Object中的实现;即采用==实现equals()方法,比较是否为同一个对象
  2. 数组元素不是基本数据类型时,存放的是引用类型,而不是对象本身???——》
  3. 即采用“==”实现equals()方法,比较是否为同一个对象???——》“==”比较内存地址和对象数据;而equals比较的是对象数据;
  4. 二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的;???——》
  5. 如何实现变长的二维数组???——》声明二维数组的时候可以只指定第一维大小,空缺出第二维大小;之后再指定不同长度的数组。但是注意,第一维大小不能空缺???——》不能~只指定列数~不指定行数;【int[ ][ ] a = new int[3][ ];】
  6. 如何实现变长的二维数组???——》二维数组也可以在定义的时候初始化,使用花括号的嵌套完成;这时候不指定两个维数的大小,并且根据初始化值的个数不同,可以生成不同长度的数组元素:int[][] c = new int[][]{{1, 2, 3},{4},{5, 6, 7, 8}};
  7. 使用new创建数组对象???——》new关键字为数组分配了内存空间,并存储数组元素的值(分配数组时会自动为数组分配默认值);当生成对象之后,引用才指向对象,否则引用为null;

其实数组初始化也分种类的???——》分为静态初始化、动态初始化和默认初始化;

数组初始化

  1. 静态初始化???——》数组在初始化时由程序员显式指定每个数组元素的初始值而数组长度由系统决定;
  2. 动态初始化???——》是数组在初始化时只指定数组长度,由系统为数组元素分配初始值;

对于C语言而言,多维数组本质上也是通过一维数组实现的。

至于动态数组,是指数组的容量能动态增长的数组;对于C语言而言,若要提供动态数组,需要手动实现;而对于C++而言,STL提供了Vector;对于Java而言,Collection集合中提供了ArrayList和Vector。

随着学习我会不断的完善数组的知识!!!

猜你喜欢

转载自blog.csdn.net/weixin_40918067/article/details/82142323