java集合框架

常用的集合类

Map接口和Collection接口是所有集合框架的父接口

  1. Collection接口是List Queue Set的父接口
  2. Map接口的实现类主要包括HashMap、TreeMap、HashTable、ConcurrentHashMap等
  3. Set接口的实现有HashSet、TreeSet、LinkedHashSet等
  4. List接口的实现类有ArrayList、LinkedList、Vector等

集合框架的底层数据结构

  1. List接口(有序重复 索引访问)按照 添加顺排列
  • ArrayList底层是Object[]数组 add的时候先计算容量,重新new一个新的数组,并复制到新数组
  • LinkedList底层是双向链表 每个节点包含前继节点和后继节点信息,第一个找到最后一个 最后一个可以找到第一个,更灵活
  • 两者的区别:数组和链表
  1. Set接口(无序不重复
  • HashSet(无序唯一): 通过hash算法来存值
  • LinkedHashSet: 链表存值,按插入顺序
  • TreeSet(有序唯一):底层是红黑树,支持排序
  1. Map接口
  • HashMap: 1.8之前是数组+线性链表 1.8之后是链表达到一定程度变成红黑树 很重要 key是数组
  • LinkedHashMap: 在HashMap底层数据结构的基础上增加一条双向链表 key是链表
  • HashTable: 数组+链表(线程安全)
  • TreeMap: 红黑树

list是存的单个对象 map是存的key-value形式 list的数据相当于map的key

HashMap底层原理

  1. 数组结构:存储区间连续、内存占用严重、空间复杂度大
  • 优点:随机读取和修改效率高,原因数组是连续的
  • 缺点:插入和删除效率低,因插入数据,这个位置的数据在内存中都要往后移动,大小固定,不易动态扩展
  1. 链表:存储区间离散、占用内存宽松、空间复杂度小
  • 优点:插入删除速度快、内存利用率高,没有固定大小,扩展灵活
  • 缺点:不能随机查找,每次都从第一个开始遍历(查询效率低)
  • 分类: 单链表和循环链表
  1. HashMap的数据结构 hash表结构:结合了数组和链表的优点
  • 节点为数组 每个节点是链表
  • put的时候 得到key的hash值,将hash值转换成数组的下标,如该下标有值,添加到该节点链表的末尾
  • get的时候 得到key的hash值,将hash值转换成数组下标,通过下标找数组里面的值,如果存在节点,再对链表上的每个key进行比较,相同的就返回
  • 增删在节点链表上完成 查询只扫描数组
  • 需要重写equals 因为默认比较的是内存地址

1.7和1.8的区别

  • 在1.8中 当hash表的单一链表长度超过8个的时候,链表结构就会转换成红黑树(平衡二叉树),查询效率提高一倍
  1. 红黑树的特性
  • 每个节点要么是红色,要么是黑色,跟节点永远是黑色
  • 每个红色节点的两个子节点一定是黑色
  • 红色节点不能连续
  • 所有叶子节点都是黑色的
  1. hashmap的默认容量是16
  • 扩容是成倍增加
  • 自己设置时,计算该数大的第一个2的幂作为初始容量(设置为5 初始容量是6)
  • 负载因子 默认是0.75
  • 到个数size超过了总容量*负载因子 时就会扩容

数组和集合的区别

  1. 数组长度不可变而且无法保存具有映射关系的数据;集合用于保存数量不确定的数据,以及具有映射关系的数据
  2. 数组 元素可以是基本类型的值,也可以是对象,集合只能报错对象

List和Set的区别?

  • List可以包含重复元素,而Set包含唯一项。
  • List是一个有序集合,它维护插入顺序,而Set是一个无序集合,不保留插入顺序,单linkedSet是有序的
  • List接口可以允许n个null值,而Set接口只允许一个null值。
  • Set 检索元素效率低下, 删除和插入效率高, 插入和删除不会引起元素位置改变。
  • List: 和数组类似, List 可以动态增长, 查找元素效率高, 插入删除元素效率低, 因为会引起其他元素位置改变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值