A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

ArrayList底层就是一个数组。          LinkedList底层则是一个双向链表。
所以他们在增删改查方面性能上有很大的不同:
         ArrayList遍历:建议用get(速度是超音速级别),也可用iterator借口实现;
                       增:如果是顺序一次往Arraylist中增加对象,可以采用;
                       增加删除修改:如果是位置不再数组末尾,而是在数组中间某个位置,则就不要用ArrayList,特别是频繁的增删改Arraylist中的数据。
         LinkedList遍历:坚决不能用get方法(速度是蜗牛级别的),最好用iterator借口实现;
                       增删改:非常建议用linkedList(速度相对于Arraylist是超音速级别)。
总结:只遍历用Arrarlist,只要有修改就用linkedList,如果修改中还有遍历则是LinkedList+iterator借口遍历。
代码比较:
  1. package test.arraylist;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;

  5. public class arraylistTest {

  6. public static void main(String[] args) {
  7. ArrayList<String> alist = new ArrayList<String>();
  8. LinkedList<String> llist = new LinkedList<String>();

  9. /*
  10. * 普通的add方法比较
  11. * */
  12. long abegin = System.currentTimeMillis();
  13. for (int i = 0; i < 100000; i++) {
  14. alist.add(String.valueOf(i));
  15. }
  16. long aend = System.currentTimeMillis();
  17. System.out.println("arraylist time:" + (aend - abegin));

  18. long lbegin = System.currentTimeMillis();
  19. for (int i = 0; i < 100000; i++) {
  20. llist.add(String.valueOf(i));
  21. }
  22. long lend = System.currentTimeMillis();
  23. System.out.println("linkedlist time:" + (lend - lbegin));


  24. /*
  25. * 普通的get方法遍历比较
  26. * */
  27. long agbegin = System.currentTimeMillis();
  28. for (int i = 0; i < 100000; i++) {
  29. alist.get(i);
  30. }
  31. long agend = System.currentTimeMillis();
  32. System.out.println("arraylist time get:" + (agend - agbegin));

  33. long lgbegin = System.currentTimeMillis();
  34. for (int i = 0; i < 100000; i++) {
  35. llist.get(i);
  36. }
  37. long lgend = System.currentTimeMillis();
  38. System.out.println("linkedlist time get:" + (lgend - lgbegin));


  39. /*
  40. *iterator方法遍历比较
  41. * */
  42. long lgibegin = System.currentTimeMillis();
  43. for (Iterator iterator = llist.iterator(); iterator.hasNext();) {
  44. iterator.next();
  45. }
  46. long lgiend = System.currentTimeMillis();
  47. System.out.println("arraylist time get iterator:" + (lgiend - lgibegin));


  48. long agibegin = System.currentTimeMillis();
  49. for (Iterator iterator = alist.iterator(); iterator.hasNext();) {
  50. iterator.next();
  51. }
  52. long agiend = System.currentTimeMillis();
  53. System.out.println("linkedlist time get iterator:" + (agiend - agibegin));
  54. }
  55. }
复制代码
运行结果:
arraylist add time :94
linkedlist add time :93
arraylist get time :0
linkedlist get time :86969
arraylist iterator time :16
linkedlist iterator time :0


评分

参与人数 1技术分 +1 收起 理由
wym + 1 淡定

查看全部评分

2 个回复

倒序浏览
继续加油  
回复 使用道具 举报
代码中让注释来得更猛烈些吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马