Java经典面试题:List与ArrayList的区别
最近XXXX被XXXX问到了Java中的List与ArrayList的区别。在这里记录一下
学过java面向对象编程的人都知道,Java有接口、抽象类、实现类这三种实现多态的方式关于多态
关于接口、抽象类、实现类之间的关系可以参考下面这张图:抽象类可以继承自接口,实体类可以继承自接口也可以继承自抽象类。自从有了接口以后,其实抽象类用的越来越少了。
而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性能比较
参考文章: