成都网站设计排名的公司价格,ps做图游戏下载网站,河南省招标投标信息网官网,怎么开网站做站长一.线性和非线性
线性#xff1a;除首尾外只有一个唯一的前驱和后继。eg#xff1a;数组#xff0c;链表等。
非线性#xff1a;不是线性的就是非线性。
二.数组是什么#xff1f;
数组是一个固定长度的存储相同数据类型的数据结构#xff0c;数组中的元素被存储在一…一.线性和非线性
线性除首尾外只有一个唯一的前驱和后继。eg数组链表等。
非线性不是线性的就是非线性。
二.数组是什么
数组是一个固定长度的存储相同数据类型的数据结构数组中的元素被存储在一段连续的内存空间中。它是最简单的数据结构之一大多数现代编程语言都内置数组支持。
三.数组的特性
1.存储类型一致。
数组的存储类型必须一致在面向对象中存在子类继承父类的情况若存储的对象都继承于某一个父类那么也可以判定为类型一致。
2.长度固定。
数组需要的是一个固定的连续的空间。
3.定义数组的方式。
int[] arr{}
int[] arrnew int[length];
int[] arrnew int[]{1,2,3,4,5}
4.通过索引查询数组中的元素
数组的索引从0开始每个元素都对应着一个索引处的值。并且索引只能是 int 类型不能为long更不能是其他的类型。所以数组的最大长度就是 int 的最大值。
5.索引的范围
由于数组的索引时从0开始所以索引的范围就是从0-(length-1)
6.数组中常见的异常
(1)NullPointException 空指针异常访问的数据不存在。
private int[] a;public void test(){a[1] 3;
}
(2)ArrayIndexOutOfBoundsException 索引越界异常索引不合理。
int[] arrnew int[5];int aarr[-1];
int barr[5];
7.常见的数组
字符串对象数组哈希表等。
四.数组的优势
数组存在索引所以很方便查询直接通过索引值调用get()返回即可。
五.数组的劣势
数组每一次在数组中间增删数据时需要注意前后的元素牵一发则动全身。
所以数组增删数据特别慢。
而且数组的长度是固定的不能动态改变。
六.动态数组
指一些拥有自动扩容能力的数组。egArrayList,Vector。
1.Vector底层逻辑
底层是一个数组使用构造器进行对数组长度的初始设置。在无参构造中调用有参构造。 所以在new Vector对象时就已经创建好了一个长度为10的数组。
add()方法的底层逻辑以及自动扩容 在自动扩容的方法中如果触发自动扩容的条件数组会自动将当前数组的长度作为参数传递过去Vector的底层会重新new一个长度为之前数组2倍的新数组并将新数组重新赋给原数组来蒙混过关让使用者以为还是之前那个数组但是实质上已经不是之前那个数组而是新数组了。
这种扩容的方式会存在一个缺陷在每次扩容时都会留下一个之前的旧数组在Vector的底层是不会对这个数组进行处理的而是等内存满了之后才会进行删除。
所以Vector牺牲的是空间获得更多的存储空间。
2.ArrayList底层逻辑
ArrayList底层同样是数组但是数组长度的设定和Vector有些不同的方面。
ArrayList的无参构造只是将一个空串赋值给了elementData数组 所以 ArrayList 在new了对象之后并不存在数组中有长度的情况但是ArrayList 恰恰就是这个小细节与Vector的差距就显现出来了。ArrayList会在第一次 add() 也就是第一次向数组中添加元素时才会将数组的长度赋值为10。就是说用的时候才创建这样就比Vector更节省空间一点。
ArrayList的自动扩容和Vector的底层逻辑基本一致只有一点点不同的地方就是ArrayList 是1.5倍扩容。
3.Vector和ArrayList的区别 本小节结束谢谢大家观看学习