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()作用是一样的,有元素时就加到所有元素后面嘛,不难理解