集合

  1. 集合继承关系

集合继承关系

img

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可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化

数组 查询快,根据下标准确定位

链表 增删快 为何? 链表是由指针指向下一个节点,增删只需改动上一个位置的指针值

而数组增加(删除)一位则后面所有节点都需后移(前移)一位

单向链表 循环链表 双向链表 双向循环链表

img

HashMap:数组+链表+红黑树

https://my.oschina.net/u/232911/blog/2250339

如何put?

根据key的hash值计算它在数组中存放的位置,然后判断这个位置是否已经存在对象,如何没有就直接放在这个位置,如果有就遍历这个

链表查找有没有相同元素如果有则替换没有就放到链表追最后(前一个元素的next指针指向这个元素),当链表到达一定长度后就转变为红黑树,

如何get?

根据key的hash值算出元素在数组中的下标之后遍历entry链表找到元素返回

map的大致容貌是这样的,当put一个对象的时候会根据对象的hash值计算出它在数组中存放的位置(通过扰动函数计算,后面会讲到),然后判断这个位置上有没有已经存在的对象,如果没有就直接放到这个位置,如果有将已存在对象的next指向当前对象形成一个链表,当链表长度超过一定数量之后,链表会转换成红黑树(这是java8之后的修改,为了提升查询效率)。所以hashmap本质上是一个二维数组加链表加红黑树的组合

img


日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com

×

喜欢就点赞,疼爱就打赏

相册 说点什么