面试java(一)
2022/4/13 11:12:45
本文主要是介绍面试java(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
==和equals 的区别
【==】对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址
【equals】: 【object】中默认也是采用==比较,通常会重写
如果没有做特殊处理 【==】与 【equals】是区别不大的
像【String】重写了 【equals】 所以【String】【equals】 比较的是两个字符串的内容
ArrayList和LinkedList区别
【ArrayList】底层使用的是 【动态数组】,在内存中是连续的内存存储 适合下标访问 【get(0) 随机访问】
因为底层使用的是数组,所以有长度与扩容机制,
【扩容机制】:因为数组长度固定,超出长度时需要新建数组
原理就是: 新建一个new数组,然后将old数组数据拷贝到new数组
并且如果不是尾部插入数据还会涉及到元素的移动(往后复制一份,插入新元素)
但是 如果使用尾部插入 并且 指定初始大小 那么性能能够比LinkedList 更高(需要创建大量的node对象)
【LinkedList】底层使用的是【链表】在内存中是分散存储 就是【node】节点存储 适合插入 删除等写操作
缺点:遍历需要使用迭代器 iterator遍历,其他的性能会非常差(比如for 因为遍历时 get(i) 下标访问不友好 会一个个遍历) 非常不好用
而且 indexof 也会导致整个遍历
所以个人更喜欢 ArrayList
ArrayList和LinkedList有哪些区别
-
【LinkedList】额外实现了 【Deque】接口,说明【LinkedList】是一个双端队列,可以在头部和尾部新增
-
【ArrayList】底层数组 【LinkedList】底层链表 所以有一个最基本的区别 数组 查询快 增删改 写操作慢 链表 就相反 查询慢 增删改快
-
【ArrayList】 add(); 都是加在尾部的,但是【ArrayList】可能需要考虑扩容的性能
但是如果都指定 index add,那么【ArrayList】扩容以外还需要移动
而【LinkedList】需要遍历 如果下标很大 那么会更慢
这篇关于面试java(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南