LinkedList作用很强大,可以用来模拟队列,栈等数据结构。至于两个迭代器区别,参考这里http://blog.csdn.net/a597926661/article/details/7679765

解决方案 »

  1.   

    上周我也遇到这个问题,但是之后就想到了解决办法,其实这个问题很简单,如果你理解队列就会明白LinkedList怎么用了。可以参考jdk里面的一段话: List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示:   List list = Collections.synchronizedList(new LinkedList(...));此类的 iterator 和 listIterator 方法返回的迭代器是快速失败 的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何硬性保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。此类是 Java Collections Framework 的成员。 
    ---------------------------------------------------------大概是以下几个特点:
    1.LinkedList是一个先进先出的队列,可以快速在队列(LinkedList)的最前面(下标0)或者后面插入、删除数据;
    2.另外这是一个线程不同步的集合,因此在多线程环境中集合本身无法提供数据正确性保证,需要在创建时“完成”同步设置,可以使用下面的语句:
       List list = Collections.synchronizedList(new LinkedList(...));3.关于Iterator,官方的解释是这样的:public interface Iterator<E>对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:    迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
        方法名称得到了改进。4.关于ListIterator的解释如下,简单来说增加了几个方法[可以在迭代的时候修改集合里面的值,而Iterator在迭代的时候是不能修改集合值的,],如果使用Iterator迭代时,修改了集合的元素将导致“快速失败”。//下面是官方关于ListIterator的解释. 系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。长度为 n 的列表的迭代器有 n+1 个可能的指针位置,如下面的插入符举例说明:
                          Element(0)   Element(1)   Element(2)   ... Element(n-1)
     cursor positions:  ^            ^            ^            ^                  ^ 注意,remove() 和 set(Object) 方法不是 根据光标位置定义的;它们是根据对调用 next() 或 previous() 所返回的最后一个元素的操作定义的。
    更多可以参考一下:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
      

  2.   

    LinkedList说白了就是一个有序的链表,链表知道不,就是物理地址上不连续但是逻辑上是连续的,这样它就能实现队列和栈的功能了,总之很有用了,就像ArrayList代表数组这种数据结构,那么LinkedList就代表链表了,我是这么理解的
      

  3.   

    LinkedList 没用。说是链表但是却体现不出链表的功能。链表特点索引慢而节点操作(增删改)快。
    但是Java中的LinkedList对节点的增删改并不快,效率还不如同容量的ArrayList。listIterator 没用过,找了一下网上代码,发现的确是好东西,应该是为List量身定做的,操作它和直接操作List没什么区别了。而Iterator 不行,能用的地方多了,其功能就会有限制,而且处理不当就会“快速失效”