小谈 ArrayList与数组

1、数组在初始化的时候要指定数组的大小,ArrayList本质也是数组,不过是一个动态的数组,大小是可以变化的

  数组的大小:length;

  ArrayList的大小:size。

2、数组很好理解,ArrayList是动态数组,究竟是怎么回事?我研究了一下

1 List<Integer> list = new ArrayList<>();
2 for(int i = 0;i< 37;i++) {
3   list.add(i);
4 }
View Code

 

  对这段代码进行断点调试,然后观察List的变化:

  list 刚初始化的时候,list本质是Object[0]

  

  i ∈[0,9],list本质是Object[10],从list.add(0)的时候list由原本的Object[0]→Object[10],

  (注意看Object[0] id=34,而Object[10] id=39)

  

  一直到第十次for循环,我们看到size在一次增加,而Object数组的length一直是10,没变。

  (直到此时Object[10]  id=39,没有变化)

  

  下面变化来了!当进入第11次循环体的时候,神奇的是Object数组的length变成了15!!!

  (同时Object[15] id=62,变化了)

  

  

  (直到第15次循环,Object[15] id=62  没变化,下面依次在Obiect[22]、Object[33]、Object[49]的时候id变化了)

  

  

  由上图的变化,可以看出ArrayList就是动态的数组,每当list真实的size达到Object的length的时候,又出来一个扩容、全新的Object数组(暂时不知,每一次扩容大小是什么规则,以后研究,哈哈),但至少满足用户需求。就这一点相较常规的数组来说,ArrayList更加灵活。

  处女篇,欢迎指正~

 

posted @ 2019-03-26 18:02  飞字有一双翅膀  阅读(85)  评论(0编辑  收藏  举报