JAVA容器之List

1.JAVA容器

        容器,是指一系列数据结构和算法的集合;在容器内部,提供了范型的数据结构和算法,从而为让不同数据类型的同一算法得以实现。在具体的算法实现的时候,是需要考虑不同数据结构的影响的,因为不同的数据结构会影响同一算法的时间复杂度和空间复杂度;但容器的最终目的是提供算法接口,而让软件工程师只用了解算法的实现,而不需要再重复造轮子而实现算法。从工程性的角度来说,容器的作用非常明显。而对软件工程师来说,是否了解和深入领会容器,是区分一个软件工程师技术深度是否足够的重要依据。

       不同语言实现了不同的容器,如C++ 98的STL,C++ 11的STL(做了Hash的扩展);本文讨论的主要是JAVA的容器。

        JAVA容器对比于C++的不同之处是(因为JAVA本身是借鉴了C++的思想而发展起来的,笔者又是C出身):

         1)相比于C++,JAVA是一种纯粹的面向对象语言,这让JAVA的编程依托于接口编程,而不是再思考过程实现;所以,JAVA容器本身按接口分为Colletion和Map两大类,然后,在这两大类接口之下进行实现和扩展;而C++本身的容器,则是单个区分的,不具有纯粹的接口编程思想。

       2)C++语言是C语言的扩展,C语言是一种很古老的语言,现如今的Kernel大部分都是C语言实现的;在C语言兴起的时候,计算机发展还很不完善,计算机本身也没有太多进程和线程的概念,而只是不同操作系统支持多进程和多线程;这导致C语言的扩展C++语言,在一开始设计的时候,没有对多线程和多进程进行支持。在C++98的STL中,根本没有线程安全这一说。而JAVA则在计算机发展之后,并自己建立了自己的语言支持平台——JVM;这让JAVA很容易支持多线程和多进程,很多容器是线程安全或者很容易实现线程安全。

       JAVA容器的类型如图所示(来源于百度百科):

       

2.JAVA容器之List

       JAVA容器主要分类两大类:Collection和Map。其中Collection对外提供单一值的结构,Map则提供键值对的结构。

       Collection又分为List和Set。其中List是顺序的,可以有重复值的线性表;Set可以是顺序的,但主要是指无重复值的集合。

       值得再次注意的是List和Set本身,是一个接口概念,而不是实际的抽象结构。所以,List接口,有具体的实现。

3.JAVA容器List的两种分类
      数据结构中,对线性表的存储的分类,一般分为两类:连续块状存储和链式存储。

      连续块状存储和链式存储的区分在于:块状存储在内存上一整块,而链式存储则是不连续,通过指针(JAVA没有指针概念,那就是链接地址)链接存储的。

      在C++中,这一般为数组类型存储和链表式存储。在C++的STL里面,vector和list的区分,是许多面试中的考点之一。

      在JAVA中,块状存储和链式存储的线性表分别为ArrayList和LinkedList。

      根据数据结构的区分,ArrayList和LinkedList的区分如下:

      1)ArrayList方便直接寻值,但插入值和删除值通常会耗费更大的时间和空间;

      2)LinkedList方便插入值和删除值,但不方便查找,因为查找值通常需要从头到尾查找。

4.List的主要方法

       JAVA中,List接口的主要用法是:

      1)add;

      2)remove;

      3)get;

      4)set。      

5.迭代器访问

       通过迭代器访问,是对容器访问的一种比较好的方法。因为,迭代器给实际的容器构成提供了一个抽象隔离层;这样,对容器的实现和访问将会分开,从而让程序具有更小的耦合性。迭代模式,本身也是设计模式的之一。

        在C++中,迭代器一开始做得并不好。在C++98中,STL的迭代器只有前向迭代器;最C++98之前的语法中,迭代器都被认为是一种指针;C++的迭代器也完全采用了指针的类似语法;用++表示访问下一个,用*表示寻找内容。

        而在JAVA中,迭代器作为接口和类实现。所有容器都有Iterator支持,同时hasNext()方法作为判断是否有迭代元素的接口,next()方法则返回迭代结点,并让迭代器指向下一个元素。

6.小结与杂感

 总结如下:

1)容器是软件工程师的必备利器,必须认真学习;

2)JAVA语言的设计思路和C++有一定区别,注意学习不同语言的差异性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章