Java经典面试题:List与ArrayList的区别

最近XXXX被XXXX问到了Java中的List与ArrayList的区别。在这里记录一下

学过java面向对象编程的人都知道,Java有接口抽象类、实现类这三种实现多态的方式关于多态

Java经典面试题:List与ArrayList的区别

关于接口、抽象类、实现类之间的关系可以参考下面这张图:抽象类可以继承自接口,实体类可以继承自接口也可以继承自抽象类。自从有了接口以后,其实抽象类用的越来越少了。

Java经典面试题:List与ArrayList的区别

而List就是接口、ArrayList就是List接口的一个实现类。List总共有ArrayList、Vector和LinkedList这三种实现类。

关于ArrayList、Vector和LinkedList,可以参考:Java list的实现类

泛型出现后。。。。

java从DK5.0开始支持Java的泛型,简单解释泛型的话就是带参数的类。为什么类也要带参数呢,可以参考什么是泛型这篇文章的解释。

ArrayList虽然使用很方便灵活,但是添加给它的任何引用类型和值类型都将隐式的被转换为Object(即装箱操作),而在使用元素时要进行拆箱操作,否则会出现编译错误的情况,这样很麻烦,所以就有另外一个和它比较相似的类,List<T>泛型类,List<T>泛型类位于System.Colletions.Generit下,List<T>泛型比ArrayList方便之处就是它避免了重复装箱拆箱的操作,当它声明时将强制性的指定一个非Object类型,相对能较好的保证代码的安全性,它的使用和ArrayList类似。

泛型集合List和非泛型集合ArrayList性能比较

使用ArrayList 这样的非泛型集合过程中,要进行装箱拆箱的操作,会有较大性能的损失

而 List<T> 泛型集合就没有这样的问题

具体可以参考:泛型集合List和非泛型集合ArrayList性能比较

参考文章:

java中抽象类和接口的区别

什么是泛型