有关Java LinkedList问题

        LinkedList<String> list = new LinkedList<String>();

        list.addLast("2");
        list.add("3");
        list.addFirst("1");

        System.err.println(list.getFirst());
        System.err.println(list.getLast()); 

        1
        3

为什么结果是1、3呢?
不是1、2呢?
那还要addLast有什么用呢?

add("3")的时候,把3加在2的后面,然后addFirst把1加载头
所以第一个是1,最后一个是3

区别:add返回boolean,addLast不返回值
共同:都是调用linkLast方法,往最后添加元素。
public void addLast(E e) {
linkLast(e);
}
public boolean add(E e) {
linkLast(e);
return true;
}

list.addLast("2"); //由于集合里一个都没有,成功后集合为["2"]
list.add("3");//默认加到末尾,成功和集合为["2","3"]
list.addFirst("1");加到最开始,成功和集合为["1","2","3"]

你们都没看懂楼主的意思,
楼主的意思是既然 有addLast,他就应该在最后一位,不管你后面的值怎么添加, 按你们说的addLast跟add还有什么区别

很明显,首先你用addLast添加的2,此时集合最后一个确实是2。但是你后面又写了一个add来添加的3,且是在2后面添加的3,那么此时最后一个元素就是3了,所以你getLast得到的是3。而你使用addFirst是在集合第一位添加,所以不论你怎么添加,第一位元素都是你通过addFirst加进去的元素。

第一次添加的时候,集合是空的,addLast之后是里边有一个2了。。然后在add之后,2后边加了个3,之后在开始加1.。。这样话就是[1,2,3]的集合

addLast是添加到当前集合的最末尾,并不是永远都是末尾。ipple1986都已经贴出源码了,除了返回值类型,add和addLast就是没区别。

/**
     * Appends the specified element to the end of this list.
     *
     * <p>This method is equivalent to {@link #addLast}.
     *
     * @param e element to be appended to this list
     * @return {@code true} (as specified by {@link Collection#add})
     */
        public boolean add(E e) {
        linkLast(e);
        return true;
    }

按照官方注释中所述,add和addLast方法两者等价,但是由于LinkedList实现了Collection接口,不得不实现add方法,其实可以不要。

add()是List接口的方法;addLast()是LinkedList类的方法(List接口中没有);LinkedList是List接口的实现类,所以LinkedList就具有add()的方法了。如果你用多态创建对象(List list = new LinkedList());此对象(list)就没有addLast()方法了。

就考虑list中有没有东西就好了,确实,没有元素时add()和addlast()作用是一样的,有元素时就加到所有元素后面嘛,不难理解