集合继承关系
Collection接口
boolean add(Object o) :向集合中加入一个对象的引用
void clear():删除集合中所有的对象,即不再持有这些对象的引用
boolean isEmpty():判断集合是否为空
boolean contains(Object o) :判断集合中是否持有特定对象的引用
Iterartor iterator() :返回一个Iterator对象,可以用来遍历集合中的元素
boolean remove(Object o) :从集合中删除一个对象的引用
int size() :返回集合中元素的数目
Object[] toArray():返回一个数组,该数组中包括集合中的所有元素
list:有序,可以存在重复元素
ArrayList:动态数组,查找快
LinkedList:双向链表,增删快
set:无序,不允许存在重复的元素
Set:检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化。
List:和数组类似,List可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化
数组 查询快,根据下标准确定位
链表 增删快 为何? 链表是由指针指向下一个节点,增删只需改动上一个位置的指针值
而数组增加(删除)一位则后面所有节点都需后移(前移)一位
单向链表 循环链表 双向链表 双向循环链表
HashMap:数组+链表+红黑树
https://my.oschina.net/u/232911/blog/2250339
如何put?
根据key的hash值计算它在数组中存放的位置,然后判断这个位置是否已经存在对象,如何没有就直接放在这个位置,如果有就遍历这个
链表查找有没有相同元素如果有则替换没有就放到链表追最后(前一个元素的next指针指向这个元素),当链表到达一定长度后就转变为红黑树,
如何get?
根据key的hash值算出元素在数组中的下标之后遍历entry链表找到元素返回
map的大致容貌是这样的,当put一个对象的时候会根据对象的hash值计算出它在数组中存放的位置(通过扰动函数计算,后面会讲到),然后判断这个位置上有没有已经存在的对象,如果没有就直接放到这个位置,如果有将已存在对象的next指向当前对象形成一个链表,当链表长度超过一定数量之后,链表会转换成红黑树(这是java8之后的修改,为了提升查询效率)。所以hashmap本质上是一个二维数组加链表加红黑树的组合
日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com