Source: https://courses.cs.washington.edu/courses/cse142/15su/lectures/08-14/slides/21-arraylist.pdf