现在的位置: 首页 > 综合 > 正文

JavaSE第四十三讲:使用LinkedList实现Stack与Queue

2013年01月19日 ⁄ 综合 ⁄ 共 1979字 ⁄ 字号 评论关闭

复习前面所讲,在ArrayList中的另外两个带参数的构造方法查看JDK Doc文档

ArrayList
public ArrayList(int initialCapacity)
       Constructs an empty list with the specified initial capacity.

      Parameters:
       initialCapacity - the initial capacity of the list
       Throws:
       IllegalArgumentException - if the specified initial capacity is negative
[这个方法中实际上传递参数是指定ArrayList底层的数组长度,之前没有带参数的构造函数默认是10个元素,这边带参数的是可以指定的数组长度的,实际上那个不带参数的ArrayList的构造函数就是调用这个带参数的构造函数]

ArrayList的另外一个构造方法:
ArrayList
public ArrayList(Collection<? extends E> c)
      Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator. 


      Parameters:
      c - the collection whose elements are to be placed into this list
      Throws:
      NullPointerException - if the specified collection is null

[这个构造方法是构造函数建立一个数组列表,该数组列表由类集c中的元素初始化。]

总结:ArrayList有如下的构造函数
ArrayList( )
ArrayList(Collection c)
ArrayList(int capacity)

第一个构造函数建立一个空的数组列表。
第二个构造函数建立一个数组列表,该数组列表由类集c中的元素初始化。
第三个构造函数建立一个数组列表,该数组有指定的初始容量(capacity)。容量是用于存储元素的基本数组的大小。当元素被追加到数组列表上时,容量会自动增加

1.查看ArrayList和LinkedList的构造方法的差异[ArrayList有三个构造方法,LinkedList只有两个,没有指定数组长度的构造函数],从这边可以看ArrayList与LinkedList的实现方式的不同是由其底层的结构来决定,LinkedList是双向链表指定数组长度无意义。

2. 我们都知道ArrayList中的用add()方法是向其集合里面添加对象,而LinkedList中的是什么呢?比如说向链表里面添加字符串是不是将这个字符串的引用添加进去呢?答案是否定的!

  所以这边这个过程是这样的:

   当要往里面添加对象时[例如 list.add("aaa")],会构造一个Entry类,这个类里面包含三个部分,第一个是向前的引用,第二个是向后的引用,第三个是数据,这个数据就是要往链表里面添加的东西,用这三个部分作为Entry的三个成员变量,构造出一个Entry对象,将这个对象添加到链表当中,所以往LinkedList里面添加的是由Entry类构造的一个对象而已。

  下面是整个过程的伪代码:

  
list.add("aaa");

  Entry{

        
Entry previous;

        
Object element; [存放真正的数据,往链表里面放置的东西["aaa"]实际上是赋给element,它是Object类型,可以接受任何东西]

        
Entry next;
 

  }

  
Entry entry = new Entry();

  
entry.element = "aaa";

  
list.add(entry);

   当向 ArrayList 添加一个对象时,实际上就是将该对象放置到了ArrayList底层所维护的数组当中[注意这里所说的对象是指这个对象的引用];当向LinkedList中添加一个对象时,实际上LinkedList内部会生成一个Entry对象,该Entry对象的结构为如上述伪代码红色字体所示。其中的Object类型的元素element就是我们向LinkedList中所添加的元素,然后Entry又构造好了向前与向后的引用previous、next,最后将生成的这个Entry对象加入到了链表当中。换句话说,LinkedList中所维护的是一个个的Entry对象。

3.
使用LinkedList的方法实现栈和队列[上一讲的作业]



累了,睡觉去。未完待续....


抱歉!评论已关闭.