每日五道面试题

1.ArrayList 和 LinkedList的区别?
ArrayList:基于动态数组,连续内存存储,适合下标访问,扩容机制:因为数组长度固定超出长度存储数据时候需要新建一个数组然后将老数组进行拷贝,如果不是尾插数据还会涉及元素的移动就是往后复制一份插入新的元素,如果使用尾插的化并指定初始的容量可以极大提升性能,甚至超过linkedlist.
linkedlist: 基于链表 ,可以存在分散的内存中,适合做数据插入以及删除操作,不适合做查询:因为需要逐一遍历,遍历linkedlist只能使用迭代器不能使用for循环,因为每次for循环是通过get(i)取得某一元素都需要对list进行遍历,性能消耗极大。另外不要使用indexOf等返回元素索引并利用其进行遍历,使用indexOf对list进行遍历如果返回为空的话会遍历整个列表
补充: linkedlist虽然插入很方便,但是linkedlist里面维护了一个node的内部类每次插入都需要加入新的结点如果插入大量的数据就会创造大量的结点(所以创建对象的消耗比较大)
2.为什么HashMap中String、Integer这样的包装类适合作为K?
答:String、Integer等包装类的特性能够保证Hash值的不可更改性和计算准确性,能够有效的减少Hash碰撞的几率都是final类型,即不可变性,保证key的不可更改性,不会存在获取hash值不同的情况内部已重写了 equals() 、 hashCode() 等方法,遵守了HashMap内部的规范(不清楚可以去上面看看putValue的过程),不容易出现Hash值计算错误的情况;
3.什么是字节码?采用字节码的好处是什么?
java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器,这个虚拟的机器在任何平台上都提供编译程序一个共同的接口。编译程序只需要面向虚拟机生成
虚拟机理解的代码然后由解释器来将虚拟机代码转为特定系统的机械码执行,在java中这种供虚拟机理解的代码叫做字节码,他不面向特定的处理器只面向虚拟机。每种平台的解释器是不同的但是虚拟机是一样的。
采用字节码的好处是在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特性,所以java程序运行时效率比较高效,而且字节码并不专对一种特定的机器,java程序无需重新编译使可在多种不同的计算机上运行。
4.为什么说java是跨平台语言?
这个夸平台是中间语言(JVM)实现的夸平台
Java有JVM从软件层面屏蔽了底层硬件、指令层面的细节让他兼容各种系统。
5. 如何实现数组和 List 之间的转换?
数组转 List:使用 Arrays. asList(array) 进行转换。
List 转数组:使用 List 自带的 toArray() 方法。
代码示例:

// list to array
 List<String> list = new ArrayList<String>();
 list.add("123"); list.add("456"); list.toArray(); // array to list 
 String[] array = new String[]{"123","456"}; 
 Arrays.asList(array);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nicholas_giao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值