JAVA SE 面试题

 

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加载执行类文件的时候,大致可分为以下部分,如图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值