请问这两种写法有什么区别
LinkedList<String> li = new LinkedList<String>();
和List<String> li = new LinkedList<String>();达人..................

解决方案 »

  1.   

    这就好像map与hashmap
    引用别人的比喻:
    Map是接口,hashMap是Map的一种实现。接口不能被实例化。
    Map map=new HashMap(); 就是将map实例化成一个hashMap。这样做的好处是调用者不需要知道map具体的实现,map接口与具体实现的映射java帮你做了。打个比方,你是一个头头,手下有几个人:张三,李四等等。你需要手下做一件事情,你关心的是有没有人做,而不关心到底是谁去做,你只需要喊一声:“来人!”具体的是哪个人进来帮你做事无所谓。
    如果说这样写: HashMap map = new HashMap();就相当于你指定要张三做事:“来张三!”
    就是这样。 
      

  2.   

    思想上的区别。
    第一种针对实现编程,你明确的声明需要的是LinkedList的实现。
    第二种针对接口编程,你声明下面的程序需要一种实现List接口的数据结构,至于是什么具体的实现则不关心。
      

  3.   

    List是接口 LinkedList类实现了List接口
    LinkedList <String> li = new LinkedList <String>(); 这样li有了更多的操作方法。
    而List <String> li = new LinkedList <String>(); 只能用List接口中定义的方法。
    可第二种方法的可维护性强,比如现在分析发现用ArrayList(也实现了List接口)数据结构更有效,只需要改为List <String> li = new ArrayList <String>();下面的代码完全不用修改!
    而第一种方法则不然。 
      

  4.   

    本当にありがとうございます^_^
    非常感谢三位达人的说明,小的已经大体上明白是怎么回事了
    我想再问问:
    List <String> li = new LinkedList <String>();
    List <String> li = new ArrayList <String>();
    这两种方法是不是只是声明的list的数据结构不同?其他的没什么区别?
      

  5.   

    对啊 ,都是接口回调,都只能用List接口中方法。只是内部数据结构不同,当然接口的底层实现也不同。 对不同的问题需要选择不同的方法,若添加删除操作多用链表,若随机访问操作多用线性表!
      

  6.   

    结账!三位达人都表现不错,mathwj兄回答了两次,所以10分,另外两位仁兄各五分,O(∩_∩)O哈哈~