开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 30 天,点击查看活动详情
java中的数组和链表
前文
本文内容主要是基础数据结构方面的知识,关于java中数组和链表内容的讨论。
java中的数组和链表
首先来看一下java数组和链表的相关知识。数组和链表其实都是一种链式的存储结构。其中数组主要是进行顺序的存储,而链表则是采用了手拉手的方式,元素与元素之间关联存储。链表本身又会分为单向链表和双向链表。单向链表是只能向同一个方向查找,所有的检索需要从头节点开始。而双向链表则是每个节点都会记录前后节点的值,可以从任意节点进行查找。
那么数组和链表的区别在哪些方面呢?首先从数据的查找角度来说,数组的查找由于数组可以进行随机的访问,所以在某些情况下数组的效率是很高的。而链表由于是手拉手的结构存储的,因此查找时需要从头节点开始处理,多数情况下的查找是要慢于数组的查找。那么从数据的新增及删除角度呢?数组的新增会将元素新增到整个队列的末尾,而在删除时,假设我们的数组长度为10,我们要删除第五个元素,每个元素实际对应的内存地址为1到10。那么经过对元素5的删除后,原来指向5的内存地址的元素将指向内存地址6,后续的元素将以此类推。也就是当操作数组删除时,需要将数组后续元素的实际地址指向进行变更。而链表在进行元素的删除及添加时,实际上只需要修改前后两个节点的指向,将原本互相握手的两个节点,分别与新增的节点连接。或者是将某个节点前后的两个节点连接到一起,也就是节点的删除操作。
根据上面的两者的区别,数组更适合用于查找更多的场景中,而链表则适合用于增加及删除更多的场景中。数组的增删会涉及到大量指针的移动,当数组长度过长时,会带来显著的效率损失。
总结
本文主要是关于数组和链表这两种数据结构的一些知识,对二者的特性及应用场景进行了对比说明。