Java面试之数组

整理了一些网上的面试经,若有不足之处,希望大佬们多多指点~

如何权衡是使用无序的数组还是有序的数组

  • 有序数组查询容易插入难,无序数据插入容易,查询难
  • 查找时间复杂度:有序数组O(log n),无序数组O(n)
  • 插入时间复杂度:有序数组O(n),无序数组O(1)

怎么判断数组是 null 还是为空

可以判断该数组长度是否为0和它是否为null

Array 和 ArrayList有什么区别?什么时候应该使用Array而不是ArrayList

Array:它是数组,申明数组的时候就要初始化并确定长度,长度不可变,而且它只能存储同一类型的数据,比如申明为String类型的数组,那么它只能存储S听类型数据

ArrayList:它是一个集合,需要先申明,然后再添加数据,长度是根据内容的多少而改变的,ArrayList可以存放不同类型的数据,在存储基本类型数据的时候要使用基本数据类型的包装类

当能确定长度并且数据类型一致的时候就可以用数组,其他时候使用ArrayList

数组和链表数据结构描述,各自的时间复杂度

数组和链表是两种基本的数组结构,他们在内存存储上的表现不一样各自特点不同

  • 数组的特点:
  1. 在内存中,数组是一块连续的区域
  2. 数组需要预留空间,在使用前要申请好内存空间,可能会造成内存空间的浪费
  3. 插入数组和删除数组效率低,插入数组的时候这个位置后面的数组在内存中都要向后移。删除数据的时候,这个数据的后面的数据都要向前面移动
  4. 随机读取效率高,因为数组是连续的,知道每一个数据的内存地址,可以直接找到给地址的数据
  5. 并且不利于扩展,数组定义的空间不够的时候要重新定义数组
  • 链表的特点:
  1. 在内存中可以存在任何地方,不要求连续
  2. 在每一个数据都保存了下一个数据的内存地址,通过这个地址找到下一个数据
  3. 增加数据和删除数据很容易
  4. 查找数据的时候效率比较低,因为不具有随机访问型,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的下一个数据的地址找到第二个数据,依次类推
  5. 不指定大小,扩展方便,链表大小不用定义,数据随意增减
  • 各自的优缺点:

数组的优点:随机访问性强、查找数据快

数组的缺点:插入和删除效率低、可能浪费内存、内存空间要求高,必须有足够的连续内存空间、数组大小固定,不能动态拓展

链表的优点:插入和删除速度快、内存利用率高,不会浪费内存、大小没有固定,拓展很灵活

链表的缺点:不能随机查找,必须要从第一个开始遍历,查找效率低、

  • 以下为数组和链表操作的时间复杂度

链表和数组个操作时间复杂度

数组有没有length()这个方法? String有没有length()这个方法

数组没有length()这个方法,只有length属性,String有length()这个方法

备注:问题整理来源于唐尤华

当然,复习光靠这些还是不够的,还是要多加代码练习以及专业书籍阅读量的,加油!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫与数据挖掘

Python正则表达式初识(五)

正则表达式的内容很丰富,今天小编继续给大家分享Python正则表达式的基础知识。今天要给大家的讲的特殊字符是竖线“|”。竖线“|”实质上是一个或的关系。

8420
来自专栏python3

python3--小数据池,is,字符编码

python3x中的str在内存中的编码方式是unicode. python3x中的str不能直接存储和发送

24010
来自专栏数据结构与算法

1081 线段树练习 2 单点查询及区间修改

1081 线段树练习 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description ...

33590
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(六) ——Redis中的压缩列表

《Redis设计与实现》读书笔记(六) ——Redis中的压缩列表 (原创内容,转载请注明来源,谢谢) 一、概述 压缩列表(ziplist)是列表键(list)...

40570
来自专栏破晓之歌

JAVA入门3-1 原

在程序开发中字符串无处不在,如用户登陆时输入的用户名、密码等使用的就是字符串。其实,在前面的章节中我们就已经使用了字符串,例如我们在控制台中输出的 "Hello...

13640
来自专栏nimomeng的自我进阶

Block官方文档

a) 像函数一样有定义好的参数 b) 有返回值 c) 能从定义的作用域中捕获状态(值) d) ...

13020
来自专栏landv

Java对象和类

22140
来自专栏云霄雨霁

字符串查找----三向单词查找树

22710
来自专栏小灰灰

JDK容器学习之LinkedHashMap (一):底层存储结构分析

LinkedHashMap 底层存储结构分析 HashMap 是无序的kv键值对容器,TreeMap 则是根据key进行排序的kv键值对容器,而LinkedH...

21650
来自专栏web前端

Vuejs --04 计算属性

一、使用原因      1、模板中表达式很便利,但实际上只适用于简单的运算,不适宜放入太多逻辑运算,例如: <div id="example"> {{ mess...

21370

扫码关注云+社区

领取腾讯云代金券