面试说好的问基础,我怎么感觉一点也不基础呢

文章有点长,文末有福利哦。

小林在mysql方面因为作答不够完善,被面试官吊打了一番。经过两天的自我复习之后,新的一轮面试又开始了。

面试官:你好,请简单介绍下自己吧。

小林:你好,我是xxxxxx,之前在深圳的xxx公司负责了xxx系统的研发设计。

面试官:嗯嗯,那我先来问你一些基础问题吧。

小林:嗯嗯,好的。

面试官:你了解arraylist吧,请说下内部的一些特性。

小林此时心里一下子乐开了花,这个简单啊。

小林:arraylist的底层主要是由数组组成,它和普通数组不太一样,arraylist具有自动扩容的功能。每次当我们add一个元素到队列里面的时候,都会有一步确认容量的机制判断(对应源码里面的ensureCapacityInternal函数)如果当数组内部的元素达到了数组阈值的时候,就会以1.5倍的体积去做扩容,底层是调用了才做系统内部的一个System.arraycopy方法。

又由于arraylist是采用数组存储的,在读取数据的时候可以借助数组位的下标去快速定位,写数据的时候需要涉及到挪动数组,所以读的性能平均要比写的性能更高一些。

面试官:嗯嗯,回答地挺全面的。那你觉得在使用arraylist的时候一般会注意些什么吗?

小林:嗯嗯,有的。一般我会根据代码的上下文给arraylist附一个初始值来定位这个数组的大小,防止其做过多不必要的扩容操作。另外在循环中进行删除操作的时候需要注意会有坑,一般建议采用迭代器的模式来处理。

ps:

如果使用以下这种方式进行元素的移除可能会导致出现删除元素不完整的情况:

public static void main(String[] args) {
    ArrayListApplication arrayListApplication = new ArrayListApplication();
    List<String> list = new ArrayList(3);
    list.add("a");
    list.add("c");
    list.add("c");
    list.add("d");
    list.add("e");
    System.out.println(list);
    System.out.println("==========");
    removeV1(list, "c");
    System.out.println(list);
}
public static void removeV1(List<String> list, String deleteItem) {
    for (int i = 0; i < list.size(); i++) {
        String item = list.get(i);
        if
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值