Java面试题冲刺第五天--基础篇2
一、问题1:数组的长度、容量和元素个数有什么区别?
答案
- 数组的长度(length):数组长度是确定且不可改变的,是数组定义的时候就确定好的,可以通过引用名称加.length获得。
- 数组的容量:数组容量和数组长度没有什么关系,当数组被初始化后,容量一旦被确定就无法更改。数组容量大小是指JVM为了让数组能够并发访问而在内存中所划分的数组的地址空间。容量就是能够在数组中存储的元素的个数,使用数组的方法和函数可以操作存储在数组容器中的元素。
- 数组的元素个数:数组的元素个数表示数组中已经存储的元素数量。例如,一个长度为10的数组存储了5个元素,则这个数组中的元素个数就是5。
示例
//定义一个长度为3的数组
int[] array = new int[3];
//将数据存入数组中,元素个数为2
array[0] = 1;
array[1] = 2;
//获取数组长度和元素个数
System.out.println(array.length); //输出3,数组长度为3
System.out.println(array[2]); //输出0,数组第三个元素默认值为0
System.out.println(array[1]); //输出2,数组第二个元素为2
二、问题2:ArrayList和LinkedList有什么区别?
答案
- 数据结构:ArrayList是动态数组实现,LinkedList是双向链表实现。
- 插入删除效率:ArrayList与LinkedList的插入和删除元素的效率不同。ArrayList的插入和删除操作会影响后面元素的索引,需要调整。而LinkedList删除元素的效率比较高,只需修改相邻节点的引用,而ArrayList则涉及到的是数组在内存中向后或向前移动的操作,效率较低。
- 空间占用:ArrayList和LinkedList在空间占用上差别很大,ArrayList所占内存大小为整形 ((n*(n+1))/2), n为数组长度;而LinkedList则完全是根据元素的个数来确定所占空间大小。
示例
List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();
long startTime = System.currentTimeMillis();
//ArrayList中间插入10000个元素
for (int i = 0; i < 10000; i++){
arrayList.add(5000, i);
}
System.out.println("ArrayList 所用时间 :" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
//LinkedList中间插入10000个元素
for (int i = 0; i < 10000; i++){
linkedList.add(5000, i);
}
System.out.println("LinkedList 所用时间 :" + (System.currentTimeMillis() - startTime));
运行结果:
ArrayList 所用时间 :78
LinkedList 所用时间 :220
从结果可以看出,ArrayList在中间插入10000个元素的操作上优于LinkedList。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java面试题冲刺第五天–基础篇2 - Python技术站