首先看一个树状图:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
├HashSet
└TreesSet
└Queue
Map
├Hashtable
├HashMap
└WeakHashMap
图形:
继承: 实线
实现: 虚线
1 Collection
查看: https://blog.csdn.net/Judy_c/article/details/78230222
Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。
Collection接口抽象出来了集合都具有的特性。例如添加、删除、得到集合中的元素个数、检测某一元素是否存在在该集合… …
Collection是一个接口 继承了 Iterable
首先查看Collection的源码以及方法:
然后查看了一下Collection的基类Iterable :
查看了上面的代码,当时就有一个疑问,为什么Collection接口又要去继承Iterable接口呢?
引用至: https://www.zhihu.com/question/48503724/answer/119178460
通过继承我们可以保留父接口中定义的行为,同时对其可以做扩展。
1.1 List
查看: https://blog.csdn.net/jack__frost/article/details/58072072
- 代表有序、重复的集合。
- 像一个数组,可以记住每次添加元素的顺序(要以对象的形式来理解),且长度是可变的。3.访问的时候根据元素的索引值来访问。
可以看到List同样继承了Collection
1.1.1 ArrayList
查看: https://blog.csdn.net/hehexiaoyou/article/details/23338101
https://blog.csdn.net/opensuns/article/details/82777473
ArrayList是一个大小可变的数组,但它在底层使用的是数组存储(也就是elementData变量),而且数组是定长的,要实现动态长度必然要进行长度的扩展。
//添加单个元素
public boolean add(E e) {
//判断添加后的长度是否