1.ArrayList 和 LinkedList 的区别
- 数据结构实现:ArrayList 是动态数组的数据机构实现,而 LinkedList是双向链表的数据结构实现
- 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
- 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率更高,因为ArrayList 增删操作要影响数组内其他数据的下标。
综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayLIstanbul,而在插入和删除操作较多时,更推荐使用Linked List.
2.如何实现数组和List之间的转化?
- 数组 ====》List:使用Arrays.asList(array)进行转化
- List ====》 数组:使用List自带的toArray()方法
//List ====》 数组
List<String>list = new ArrayList<String>();
list.add("111");
list.add("222");
list.toArray();
//数组 ====》List
String[] array = new String[]{"111","222"};
Arrays.asList(array);
3.ArrayList 和 Vector 的区别是什么?
- 线程安全:Vector使用了Synchronized 来实现线程同步,是线程安全的,而ArrayList是非线程安全的。
- 性能:ArrayList 在性能方面要优于 Vector
- 扩容 :ArrayList 和 Vector 都会根据实际的需要动态调整容量,只不过在Vector扩容每次会增加一倍,而ArrayList只会增加50%
4.Array 和 ArrayList 有何区别?
- Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
- Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
- Array 的内置方法没有 ArrayList 多,比如 addAll ,removeAll ,iteration 等方法只有 ArrayList 有。
5.在Queue 中poll() 和 remove() 有什么区别?
- 相同点:都返回第一个元素,并在队列中删除返回的对象。
- 不同点:如果没有元素,poll() 会返回 null , 而 remove() 会直接抛出 java.util.NoSuchElementException 异常
示例代码:
Queue<String>queue = new LinkedList<String>();
queue.offer("String1");//add
queue.offer("String2");
System.out.println(queue.poll());
System.out.println(queue.remove());
System.out.println(queue.poll());
System.out.println(queue.remove());
System.out.println(queue.size());
运行结果:
String1
String2
null
Exception in thread "main" java.util.NoSuchElementException
at java.util.LinkedList.remove(LinkedList.java:788)
at java.util.LinkedList.removeFirst(LinkedList.java:134)
at java.util.LinkedList.remove(LinkedList.java:481)
at cn.edu.ccut.test.Test.main(Test.java:32)