将LinkedList作为集合的理由?

时间:2016-06-28 05:36:25

标签: java collections linked-list

通过使用remove(int index)方法,可以通过索引访问存储在LinkedList中的对象。 并且没有方法可以按值删除数据成员?!

那么这个数据结构如何证明是LinkedList?

1 个答案:

答案 0 :(得分:0)

如何正确使用LinkedList

要记住的LinkedList的主要属性 - 它只提供对其元素的顺序访问,而不是随机访问ArrayList。因此,不要尝试调整您之前使用ArrayList为LinkedList编写的逻辑 - 是的,它们都是列表,但它们的实现方式太不相同了。

LinkedList是一种顺序数据结构。这就是所有链表算法依赖于迭代器的原因。在某些情况下,比如remove(Object),迭代器将在库方法中隐式使用,在其他情况下,必须显式使用。例如,您有一个LinkedList,您需要在指定的字符串后删除所有字符串,长度为5个字符。如果指定的字符串不存在,则必须处理完整缓冲区。如果这个例子看起来有点人为,那么用带有时间戳和其他属性的消息替换字符串,它就会变得更加真实。

这可能是解决此问题的第一种方法 - 使用indexOf方法查找所需字符串的位置,并将此位置用作listIterator(int)方法的参数(当然,在此位置添加1以满足'之后'指定的字符串'/'指定的字符串未找到'个案。

public static void cleanStringListSlow( final LinkedList<String> lst, final String first )
{
    final int startPos = lst.indexOf( first ) + 1;
    final ListIterator<String> iter = lst.listIterator( startPos );
    while ( iter.hasNext() )
    {
        if ( iter.next().length() == 5 )
            iter.remove();
    }
}