数组和链表和集合的区别和应用场景以及堆和栈的区别

数组和集合的区别:

1.数组的长度固定的,超过长度时,只能创建一个新的数组,并把旧的数组的值传进去方可;

而集合的长度是动态不固定的。

2.数组的存储类型是单一的,同一数组只能存储同一数据类型的数据。

而集合可以存储多钟数据类型的数据。

3.数组只能通过下标来访问数据,而集合可以通过多种类型来查找,比如map就可以通过键值对来进行查找。List也可以通过索引来进行查找。

数组和链表的区别:

1.首先,个人应用中的感觉:

数组就好像身上编了号然后站成一排的人。查询容易,但是增加和删除麻烦,因为后面的每个人身上的编号都要变化。

扫描二维码关注公众号,回复: 3371202 查看本文章

而链表就像手牵手站成一圈的人,要找到第10个人比较麻烦,但是要增和删只要解开两个人的手就可以,很方便。

2.数组和链表都可以叫做线性表。

数组又叫做顺序表,主要区别在于,顺序表是在内存中开辟一段连续的空间来存储数据,而链表是靠指针来连接多块不连续的的空间,在逻辑上形成一片连续的空间来存储数据。

链表可以看成是一个一个小房间组成的,每个房间都靠指针来指向下个房间,它是靠指针来关联指向的

两种各有各的好处,链表方便删除和插入,顺表表方便查询等。

综上:

数组静态分配内存,链表动态分配内存;

        数组在内存中连续,链表不一定连续;

        数组元素在栈区,链表元素在堆区;

注:数组的值在栈中保存,数组变量本身在堆中保存。

        数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);

        数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。

栈和堆的区别

首先

JVM内存的划分有五片:

       1.   寄存器;

       2.   本地方法区;

       3.   方法区;

       4.   栈内存;

       5.   堆内存。

栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。

       堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。

1.栈内存存储的是局部变量而堆内存存储的是实体;

2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

猜你喜欢

转载自blog.csdn.net/qq_37455615/article/details/82749481