Java容器类总结

  最近看了一下java容器类的一些基础知识,算是对以前不重视的基础部分进行强化,一下对一些容器类进行一些基本的总结。

公共部分:
  每次容器发生改变(扩容、增加数据、删除数据等),会使modecount加1,这个参数的用处在于记录当前容器的变动次数,使得在用迭代器遍历的过程中能够检测到。

 

List:
  1.ArrayList:底层采用的数组来实现的,但是可以动态增加,当添加数据到数组中时,发现数组已经满了,会创建新的数组,新数组的长度为当前长度的1.5倍,需要连续的存储空间,对于已经排序的数组查找很快,移动删除耗时较多。

 2.LinkedList:底层是使用链表实现,是一个双向链表,无需连续存储空间,查找费时,头尾增加删除效率高。

Map:
  1.HashMap:底层采用数据+单链表的方式实现,默认阈值是0.75,也就是说长度为16的数组当有12个元素的时候就会扩容(扩容到目前长度的两倍),数组里面装的都是链表,通过hash散列算法决定映射到数组哪个位置,当发生碰撞,会将当前数据放入链表头的位置,对数据进行查找的时候,需要调用hashcode()和equals()方法,在内部做比较时,先判断hash是否相等再调用equals(),因为hash值是int类型,比较起来比equals()快,允许key为空,保存数据和获取数据效率都很高,但是数据是无序的。

  2.TreeMap:底层数据结构为红黑树,是一个平衡二叉树,之所以能做到有序,是因为会使用Compareable接口的compareto()方法对立面的数据进行排序,因为是平衡二叉树,所以保存、删除、查询效率都不错,但是相对HashMap效率还是差一些,如果不需要数据有序,HashMap是更好的选择。

Set:

  1.HashSet:底层使用HashMap实现,HashSet相当于只有Key值,其Value是一个固定的全局Object,调用put方法的时候就是将key和这个固定的value放进HashMap,如果HashMap返回的是null则代表之前不包含这个值,如果返回的不为null则表示之前包含了这个值,因为底层是HashMap,所以它的保存、删除、查找效率都高,并且无重复值。

  2.TreeSet:跟HashMap类似,底层由TreeMap实现,基本的操作方法都是直接在调用TreeMap的方法,TreeMap特性都有,外加一个无重复值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值