• 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()呢?
    问题就在于List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 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)来定制你的自定义类.

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/danica/p/danica.html
Copyright © 2020-2023  润新知