Java面试题之集合框架库01

1.什么是集合

简单来说,Java集合就是一个简单存放对象的容器。

2.集合、数组的差别?

(1)集合和数组的差别
a.数组是静态,集合是静态;数组静态集合是动态
b,集合功能更全面
c.数组需要指定类型Integer[] arr,存储数据必须是这个类型;集合创建时不需要(可有可无)如果有存储数据必须是这个类型,如果没有存储数据可以是任意的。
注意:集合指定存储数据类型的方式用的较多,原因更好管理。
d.数组在指定的类型时既可以使用普通类型,也可以使用引用类型。集合只能使用引用类型。
e.数组Java内置类型数组效率更高
(2)数据库、数组、集合的应用场景
数据库:达到数据的持久化
数组/集合:不想保证持久化 临时使用可以选择数组或者集合,首选是数组

3.ArrayList LininkedList Vector 区别

为了更好的理解三者的关系,我们看一张图

三者都属于List接口,List是有序的Collection,它们可以使每个元素有序的插入,用户可以使用索引。
(1)底层数据结构
ArrayList:

public class list<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

LinkedList:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

Vector:

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

从三者继承的父类与接口来看
ArrayList和Vector是一致的,二者的实现方式也是类似的,但Vector并不常用。ArrayList与Vector的底层都是数组,存储元素是都是从下标为0开始;删除元素时,部分元素会移位。
LinkedList是基于双向链表实现的,其含有头节点
(2)初始容量与扩容机制
ArrayList:默认的初始容量为10,调用ensureCapacity();来进行扩容,扩容的容量是之前的1.5倍。
LinkedList:没有初始化大小,也不能扩容
Vector:如果在创建Vector时,指定了capacityIncrement的大小,则Vector中动态数组容量需要增加时,如果容量的增量大于0,则增加的是大小是capacityIncrement,如果增量小于0,则增大为之前的2倍。
(3)方法上
LinkedList的接口之一为Deque,其可以是双向链表,也可以当作堆栈,队列和双端队列来使用
(4)线程安全
ArrayList和LinkedList都是非线程安全的,在并发环境下用Collections的synchronizedList()调用它们即可
Vector是线程安全的,它的大部分方法都具有synchronized关键字,但是Vector的效率没有ArrayList和LinkedList高。
(5)使用上
ArrayList:内部的元素可以直接通过get与set方法进行访问.元素顺序存储 ,随机访问很快,删除非头尾元素慢,新增元素慢而且费资源 ,较适用于无频繁增删的情况
LinkedList:在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList. 适用于 :没有大规模的随机读取,有大量的增加/删除操作.随机访问很慢,增删操作很快,不耗费多余资源 ,允许null元素。
Vector:类似于ArrayList,但它是同步的,开销也比ArrayList大

4.迭代器
public interface Iterator<E> {


    boolean hasNext();    //每次next之前,先调用此方法探测是否迭代到终点

    E next();            //返回当前迭代元素 ,同时,迭代游标后移


     /*删除最近一次已近迭代出去的那个元素。
     只有当next执行完后,才能调用remove函数。
     比如你要删除第一个元素,不能直接调用 remove()   而要先next一下( );
     在没有先调用next 就调用remove方法是会抛出异常的。
     这个和MySQL中的ResultSet很类似
    */
    void remove()
    {
        throw new UnsupportedOperationException("remove");
    }

设计模式:为所有的集合提供统一的遍历方式,不暴露内部结构
ListIterator 双向遍历 iterator 单向遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值