存储在LinkedList中的对象可以通过索引访问,使用remove(int index)方法。没有按值删除数据成员的方法吗?
那么这个数据结构如何证明是LinkedList呢?
如何正确使用LinkedList
要记住LinkedList的主要属性-它只提供对其元素的顺序访问,而不是随机访问ArrayList。所以,不要试图将你之前用数组列表编写的逻辑应用到LinkedList中——是的,它们都是列表,但是它们的实现方式太不同了。
LinkedList是一个顺序数据结构。这就是为什么所有链表算法都依赖于迭代器。在某些情况下,如remove(Object),迭代器将隐式地在库方法中使用,在其他情况下,它必须显式地使用。例如,您有一个LinkedList,您需要删除指定字符串之后的所有字符串,长度为5个字符。如果指定的字符串不存在,则必须处理整个缓冲区。如果这个示例看起来有点假,那么用带有时间戳和其他属性的消息替换字符串,它将变得更加真实。
这可能是解决这个问题的第一种方法-使用indexOf方法找到所需字符串的位置,并将此位置用作listtiterator (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();
}
}