Java集合概述

在这里插入图片描述

从上图可以看出,Java集合主要分两大类:CollectionMap

Collection

1.List

List是有序的,它的实现类主要有以下3个:

  • ArrayList

    底层基于动态数组,允许对元素进行快速随机访问,不适合插入和删除。

  • Vector(线程安全)

    与ArrayList相似,也是通过数组实现的,二者的区别是Vector是线程安全的,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,实现同步的代价较高。因此,访问Vector比访问ArrayList慢

  • LinkedList

    底层是用双向链表实现,适合数据的动态插入和删除,随机访问和遍历速度较慢。除此之外,它还提供了List接口中没有定义的方法,用于操作表头和标为元素,可以当作堆栈、队列和双向队列使用

2.Set

set集合是无序的,它的实现类主要有以下3个:

  • HashSet(无序,唯一)

    基于HashMap实现,不允许有重复的元素,遍历时元素的顺序会发生改变。

  • TreeSet(有序,唯一)

    底层基于红黑树,支持有序性操作。

  • LinkedHashSet

    LinkedHashSet继承了HashSet,内部基于LinkedHashMap。因此,它的内部方法很简单,只提供四个构造方法。

Map

map的实现类主要有以下几个:

  • HashMap(线程不安全)

    JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间

  • LinkedHashMap

    LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时带参数,按照访问次序排序。

  • HashTable(线程安全)

    数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的,是线程安全的。

  • TreeMap

    底层基于红黑树。

参考

https://snailclimb.gitee.io/javaguide/#/java/这几道Java集合框架面试题几乎必问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值