zoukankan      html  css  js  c++  java
  • List和ArrayList的区别

    List是一个接口,而ListArray是一个类。 
    ListArray继承并实现了List。 
    所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造。 
    List list;     //正确   list=null; 
    List list=new List();    //   是错误的用法

    List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。 
    而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。 
    这是一个例子: 
    import java.util.*;

    public class TestList{ 
    public static void main(String[] args){ 
    List list = new ArrayList(); 
    ArrayList arrayList = new ArrayList();

    list.trimToSize(); //错误,没有该方法。
    arrayList.trimToSize();   //ArrayList里有该方法。

    }

    编译一下就知道结果了。

    如果这个样子: 
    List a=new ArrayList(); 
    则a拥有List与ArrayList的所有属性和方法,不会减少 
    如果List与ArrayList中有相同的属性(如int i),有相同的方法(如void f()), 
    则a.i是调用了List中的i 
    a.f()是调用了ArrayList中的f(); 
    --------------------------------------------------------------- 
    问题的关键: 
    为什么要用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?

    如果直接声明为ArrayList<String> list=new ArrayList<String>()这个也没有问题。
    而声明成:List<String> list=new ArrayList<String>();这样的形式使得list这个对象可以有多种的存在形式,比如要用链表存数据的话直接用LinkedList,使用ArrayList或者Vector直接通过list去=就可以了,这样让list这个对象活起来了,


    再比如你需要换成其它的实现类,如 LinkedList或者Vector等等,这时你只要改变这一行就行了: 
    List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。 
    假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。


    地区用 List arr = new ArrayList();定义;行业用 ArrayListarr = new ArrayList();定义;则说明,行业里用到了ArrayList的特殊的方法.

    另外的例子就是,在类的方法中,如下声明:
    private void doMyAction(List list){}
    这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.

    如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.很多需求只能用一个list,内存有限,或者线程同步,不能有更多的集合对象,使得List总的接口来管理对象。

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/Seachal/p/7113082.html
Copyright © 2011-2022 走看看