emmm,3月14日下午上完课回去路上接到了字节跳动的电话,邀请我于第二天(3.15)下午四点进行视频面试。说实话我激动中带了点慌,赶紧准备了一波,我知道其对于数据结构和算法的要求是很高的,在这块儿我确实就只想掌握了点皮毛,现在只有一天时间准备这部分毕竟投入产出比太低,于是还是准备简历上的内容,然后把排序算法复习一遍。
晚上大伙儿一起,组织起来给我模拟面了一下,我说的很直(一个问题就只回答问题本身而已,这样根本聊不下去),而且很多知识都模糊了。回去后就好好整合了一下,在面试前准备了以下内容。
以下主要是根据我的简历准备的内容!!!
1.介绍下ArrayList
ArrayList是一种数组队列,其底层是基于数组的,但是是一种动态数组。
ArrayList中有两个重要对象,一个是 elementdate ,保存了添加到ArrayList里的元素。当使用ArrayList里的带参数的构造方法时,可以对其进行初始长度设置,如果直接使用不带参数的构造方法,则默认初始长度为10;另一个是size,即实际长度。
其继承了AbstractList,实现了List,能对其中的元素进行增删查改等操作。在这里经常与LinkedList作比较。
LinkedList是基于循环双向链表的。该链表是由多项的表项连接而成,一个表项包括前驱表、元素内容和后驱表。在一个LinkList里会有一个header,其前驱表项是链表的最后一个元素,后驱表项是第一个元素。
- A基于数组,数组的长度是固定的,故进行插入或者是删除一个元素时是比较麻烦的,因为其在插入或者删除某一位时,该位及以后都需要进行移位替换。
- L基于链表,其对插入和删除某一元素就相对来说很简单,但是其对于查找操作则很麻烦,需要进行链表的遍历,性能不好。
ArrayList与Vector很相似,但是ArrayList不是线程安全的,因此,ArrayList较适合用于单线程模式,而多线程情况下可用vector。
其次,还可以看下ArrayList的遍历,我有试了一下分别是用 1、随机访问,通过索引值去遍历 2 、使用迭代器遍历 3、for循环 。最终分别用时3ms,8ms,5ms. 故用索引效率最高,迭代器则较差。
1.索引值遍历
Integer value = null;
int size = list.size();
for (int i=0; i<size; i++) {
value = (Integer)list.get(i);
}
2.迭代器遍历(iterator)
Integer value = null;
Iterator iter = list.iterator();
while (iter.hasNext()) {
value = (Integer)iter.next();
}
3.for循环
Integer va