欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA基础面试题

程序员文章站 2022-05-05 18:34:44
...
 

JAVA SE

List中ArrayList和LinkedList的区别

List集合遍历的结果都是稳定的。ArrayList是容量可以改变的非线程安全的集合。内部实现使用数组进行存储,集合的扩容会从创建更大的数组空间,把原有的数组复制到新的数组中。支持对元素的快速随机访问因为是数组。

JAVA中的LinkedList是双链表结构,大量数据的查询效率会非常差,但是增删数据节点的效率更高。继承AbstractList实现Deque接口,所以有队列和栈的性质。具体的使用在Collection接口中说到过了。<!--more-->

ArrayList和HashMap的初始化以及不同JDK版本的区别

ArrayList是存储单个元素的顺序表结构。而HashMap是存储KV键值对的哈希式结构。

ArrayList实现了List、RandomAccess在内的一些接口。这些接口主要是定义和设计它是如何初始化的。ArrayList的源码中规定了它的默认大小是10,每当使用add方法增加元素的时候,如果容量不够就会自动调用它其中的grow()方法来扩容,具体扩容在JDK7前后的机制是不一样的,JDK7以前是 *3/2+1的方式获取新的容量,之后采用的是扩容1.5倍。具体如何扩充代码实现可以查看对应的源码。

所以在初始化ArrayList的时候应当给它赋予初始值,不然会出现这样的情况:存储1000个元素会被动的扩容13才可以完成存储。甚至这个值非常大的时候,在扩容的时候会出现内存溢出的状况,具体可以查看源码。

HashMap它在JDK1.7之前是数组和链表的形式。1.8之后结构变成了数组链表以及红黑树。红黑树的引入是为了防止并发时形成链表的回环状况。----这里红黑树以及原理实现目前也云里雾里更别说实现了,这与阿里大佬差距简直如银河,后面学会了会过来更新。它的初始化通过分析源码可有俩个重要的参数,一个是Capacity决定了存储容量的大小。另一个LoadFactor决定了填充比例是0.75。以它俩的乘积来表示HashMap中能存放的元素的个数。

HashMap默认的大小是16.容量的大小都是2n,这样的方式是的元素在存储的时候计算落槽的位置更快。log21000=9.96,在未初始化大小的下存储1000个元素需要进行7次扩容,所以尽量进行2n这样的初始容量来减少扩容带来的性能的损耗。

JVM内存模型

JAVA中内存主要分为堆栈区(Stacks)和堆区(Heap),具体在JVM加载执行类文件的时候,大致可分为以下部分,如图:JAVA基础面试题

 

相关标签: JAVASE

上一篇: JSON

下一篇: 不让你少一根头发