Java容器
2020-12-25 16:06:57 0 举报
AI智能生成
Java容器思维导图
作者其他创作
大纲/内容
List (对付顺序的好帮手) :存储元素有序,可重复的
底层数据结构
ArrayList : Object[] 数组
Vector : Object [] 数组
LinkedList : 双向链表(jdk1.6之前为循环链表 , 1.7后取消)
Set(注重独一无二的性质) : 存储的元素是无序,不可重复的
底成数据结构
HashSet (无序,唯一) : 基于HashMap 实现, 底层采用 HashMap 来保存元素
LinkedHashSet : 是HashSet 的子类 , 并且内部是同步LinkedHashMap 来实现的
TreeSet ( 有序, 唯一) : 红黑树 (自平衡的排序二叉树)
Map (使用key值进行搜索) : 使用键值对 key value 进行
存储 key 为无序,不可重复的 , value 为无序,可重复的 ,
每个键最多只能映射一个值
存储 key 为无序,不可重复的 , value 为无序,可重复的 ,
每个键最多只能映射一个值
底层数据结构
HashMap : JDK 1.8 之前HashMap 是由 数组+链表组成的,数组是HashMap 的主体 ,
链表则是主要为了解决哈希冲突而存在的 ("拉链法" 解决冲突). jdk1.8 以后解决哈希冲突时
变为了,当链表长度大于阀值(默认为8) (将链表转换成为红黑树,但是会判断当前数组的长度小于
64,会优先进行数组扩容,)
"拉链法" : 创建一个链表数组,数组中每一个就是一个链表, 若遇到哈希冲突 , 则将冲突的值加入链表中
"红黑树" : 是一个自平衡(不是绝对平衡) 的 二叉查找数 , 树上的每个节点都遵循
1. 每个节点都有红色或者黑色
2 .树的根始终是黑色的
3.没有两个相邻的红色节点 ( 红色节点不能有红色父节点或红色子节点, 并没有说不能出现连续的黑色节点)
4.从节点(包括根)到其任何后代NULL节点(叶子节点下方挂的两个空节点,并且认为他们是黑色的)的每条路径
都具有相同数量的黑色节点
链表则是主要为了解决哈希冲突而存在的 ("拉链法" 解决冲突). jdk1.8 以后解决哈希冲突时
变为了,当链表长度大于阀值(默认为8) (将链表转换成为红黑树,但是会判断当前数组的长度小于
64,会优先进行数组扩容,)
"拉链法" : 创建一个链表数组,数组中每一个就是一个链表, 若遇到哈希冲突 , 则将冲突的值加入链表中
"红黑树" : 是一个自平衡(不是绝对平衡) 的 二叉查找数 , 树上的每个节点都遵循
1. 每个节点都有红色或者黑色
2 .树的根始终是黑色的
3.没有两个相邻的红色节点 ( 红色节点不能有红色父节点或红色子节点, 并没有说不能出现连续的黑色节点)
4.从节点(包括根)到其任何后代NULL节点(叶子节点下方挂的两个空节点,并且认为他们是黑色的)的每条路径
都具有相同数量的黑色节点
LinkedHashMap : 继承自 HashMap , 所以它的底层仍然是基于拉链式散列结构即由
数组和链表或红黑树组成. 另外 LinkedHashMap 在上面结构的基础上,增加了一条双向链表
使得上面的结构可以保持键值对的插入顺序.
数组和链表或红黑树组成. 另外 LinkedHashMap 在上面结构的基础上,增加了一条双向链表
使得上面的结构可以保持键值对的插入顺序.
HashTable : 数组 + 链表组成 , 数组是HashMap 的主体 ,链表则是主要为了解决哈希冲突
TreeMap : 红黑树
Iterator 迭代器
描述 : 迭代器可以对集合进行遍历, 但每一个集合的内部数据结构可能是不尽相同的,所以定义了迭代器
提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节
提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节
作用 : 遍历集合,更加安全, 在当前遍历的集合中元素被更改的时候会抛出 concurrentModificationException
0 条评论
下一页