集合

简介

集合类存放于Java.util包中,主要有3种,set,list,queue,map。
Collection,是集合set,list,queue的最基本的接口。
map,是映射表的基本接口。
iterator,迭代器,可以通过迭代器遍历结合中的数据。

结构

**Collection:**接口

  • [List] 接口
    **arrayList:**排列有序,可以重复,底层使用数组,查询速度快,增删速度慢,getter()和setter()方法块。线程不安全,当容量不够时newsize = oldsize*1.5+1
    **linkedList:**排列有序,可以重复,底层使用双向循环链表数据结构,查询速度慢,增删速度快,add()和remove()方法块。线程不安全。
    **vector:**排列有序,可以重复,底层使用数组,查询速度快,增删速度慢,线程安全,效率低,当容量不够时,默认扩展一倍。
  • [Set ] 接口
    **hashSet:**排列无需,不可重复,底层使用hash表实现,存取速度快,内部是hashMap
    **TreeSet:**排列无需,不可重复,底层使用二叉树实现,排序存储,内部是TreeMap的SortedSet.
    **LinkedHashSet:**采用hash表存储,并用双向链表记录插入顺序,内部是LinkedHashMap.
  • [Queue ] 接口:在两端出入的List,也可以用数组或链表实现。先进先出。

Map接口

  • HashMap:键不可以重复值可以重复,key、value都可以为null,null值存放在table[0]的位置,底层是数组+链表,线程不安全, 默认初始值16,加载因子0.75。HashMap的容量大小一直是2的幂,初始化时会选择大于制定容量的第一个2的幂作为容量。newsize = oldsize * 2。Iterator it = map.entrySet().iterator()。遍历
    Java8之后,hashMap由数组+链表+红黑树组成,当链表中的元素超过了8个之后,会将链表转换为红黑树。
  • Hashtable:键不可以重复,值可以重复,key、value都不能为null。线程安全,实现方式为对整个表加锁synchronized,性能较差,底层数组+链表。初始容量11,默认加载因子为0.75,newsize = oldsize*2+1。put(key,value)时,当value为null时,直接抛出空指针异常,key为null时,调用key.hash方法时抛出空指针异常。Iterator it = map.entrySet().itreator()。遍历
  • TreeMap :键不能重复,值可以重复,底层是二叉树。
  • ConcurrentHashmap:底层使用数组+链表实现。key和value都不能为null,线程安全,实现线程安全是通过锁分离,为每一段加锁。并且扩容是在段内扩容。由Segment(桶)和HashEntry(节点)数组组成。Segment是一种可重入锁ReentrantLock。
    默认有最多支持16个线程并发写。Java8也引入了红黑树。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wmf_helloWorld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值