面试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(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程