请教ArrayList和LinkedList的区别!

sky_knight 2003-09-26 10:32:08
请问ArrayList和LinkedList中哪个可以从中间删除元素,我试了一下他们的remove(i)方法,好像都只能从尾部一个元素,i根本不起作用啊,是怎么回事?谢谢
...全文
235 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_knight 2003-09-26
  • 打赏
  • 举报
回复
以你这么说,就是ArrayList是可以实现从中间删除一个元素的?可是在我的一个程序功能中,有两个JSP页面,第一个页面中生成一个STATIC的静态ArrayList对象,然后到第二个页面进行删除LIST中的某个元素的操作,例如:我原来LIST中有object0,object1,object2,object3共4个元素,我在第二个页面执行LIST.remove(1);然后把他们打印出来,结果是:object0,object2,object3,这是正确的,然后再返回到第一个页面等待其它操作,可是发现在第一个页面里显示出来的LIST中的内容却是:object0,object1,object2了,把最后一个object3删除了,而object1却还在,太郁闷了!到底要怎么用呢?
ioriwellings 2003-09-26
  • 打赏
  • 举报
回复
ArrayList是List接口的一个可变长数组实现。实现了所有List接口的操作,并允许存储null值。除了没有进行同步,ArrayList基本等同于Vector。在Vector中几乎对所有的方法都进行了同步,但ArrayList仅对writeObject和readObject进行了同步,其它比如add(Object)、remove(int)等都没有同步。

看看它的remove 源:
public Object remove(int index)
{
 RangeCheck(index);
 modCount++;
 Object oldValue = elementData[index];
 int numMoved = size - index - 1;
 if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved);
 elementData[--size] = null; // Let gc do its work return oldValue;
}

  RangeCheck()的作用是进行边界检查。由于ArrayList采用一个对象数组存储元素,所以在删除一个元素时需要把后面的元素前移。删除一个元素时只是把该元素在elementData数组中的引用置为null,具体的对象的销毁由垃圾收集器负责。
这个就可以实现 删除 指定位置的元素。

sky_knight 2003-09-26
  • 打赏
  • 举报
回复
谢谢各位了,很不好意思,是我自己的程序出了个小bug
ji66 2003-09-26
  • 打赏
  • 举报
回复
Linkedlist 可以在链表头尾增加、删除、插入元素
youfly 2003-09-26
  • 打赏
  • 举报
回复
ArrayList的实现采用了动态数组,因此它的插入或者删除的效率会变得不好,但有很好的数据遍历性能。linkedList用的是链表的技术,因些它对于插放或者删除操作的效率很高,对于查询的效率却是不好。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧