一、集合框架体系图

二、Java集合框架的基本接口

Collection

为集合层次的根节点。一个集合代表了一组对象,这些对象即为它的元素。Java提供这个接口的任何直接实现类。

  • List:是一个有序集合;它可以包含重复元素。你可以通过它的索引来访问它的任何元素。List更像一个长度可变的数组
  • Set:是一个无序集、不可以包含重复元素。

Map

是一个key映射到value的对象。一个Map不能包含重复的key,value可以重复;每一个key最多只能映射到一个value。

还有一些其他的接口:如Queue,Dequeque,SortedSet、SortedMap

三、集合框架基础底层数据结构总结

List

  • ArrayList :Object数组
  • LinkedList :双向链表(JDK6之前为循环列表,JDK7取消了循环)
  • Vector:Object数组,线程安全的

Set

  • HashSet:无序,唯一,hashCode,基于hashMap实现的,底层采用的是HashMap来保存元素。(基于HashMap的key)

    • LinkedHashSet:LinkedHashSet继承于HashSet,类似于 LinkedHashMap,其内部多了一条双向列表,使其插入的顺序保持一致

Map

  • HashMap

    Jdk8之前,HashMap是由数组和链表组成,数组是HashMap的主题,链表是 解决哈希冲突而存在的。
    Jdk8及以后,HashMap在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8时),将链表转化为红黑树,以减少搜索的时间

    • LinkedHashMap

      • 是继承于HashMap,再其基础上新增了一条双向链表,使得上面的结构可以保持绝对的插入顺序
  • HashTable:线程安全的,不允许key为null

  • ConcurrentHashMap:线程安全,效率更高好用,下面有更详细的介绍

  • TreeMap:红黑树

四、Connection与Connections的区别

  • Connection:是集合类的上级接口,继承他的接口为主要为Set、List
  • Connections:是正对集合类的一个工具类,它提供了一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

五、List和Set的区别

  • List特点:元素有放入顺序,元素可以重复的
  • Set特点:元素无放入顺序(HashCode决定),元素不可以重复的。

六、ArrayList和LinkedList区别

ArrayList

优点:ArrayList是实现与基础动态数组的数据结构,因此地址连续,一旦数组存储起来可以通过偏移量记性快速查找
缺点:因为地址连续,ArrayList要移动数据,所以插入和删除操作效率会较低。

LinkedList

优点:LinkedList是基于链表的数组结构,地址的任意的,开闭内存空间是不需要一个连续的空间的。对于新增和删除操作会效率较高;
缺点:因为LinkedLIst没有偏移量,查询的效率会较低。

七、HashSet和HashMap的区别

  • Set:Set是线性结构的,值不能重复。Hashset是用HashMap的key来实现的;
  • Map:Map键值对的映射,可以空键空值。HashMap是Map的Hash实现,key的唯一性是通过key值的hashcode的唯一来确定的,value 的设置则是链表结构(解决相同的hashcode)

八、HashMap和ConcurrentHashMap的区别

ConcurrentHashMap是线程安全的map的一种实现
  • ConcurrentHashMap对整个桶数组进行了分割分段,然后在每一个分段上都要供lock锁进行保护,相对于HashTable的syn关键词的粒度更精细了一些,并发性能更好了。
  • 而HashMap是没有锁的,不是线程安全的。HashMap的键值对允许有null,但是ConcurrentMap都不允许

注意

  • List考虑安全并发的用 CopyOnWriteArrayList是List的实现类,查询高的用ArrayList,增删改用LinkedList;

  • Map考虑安全并发的用 ConcurrentHashMap ,其他用hashMap

九、队列和栈是什么

  • 队列:Queue 先进先出(FIFO);是一个接口,他的是实现类在java并发包中。
  • :Stack 先进后出(FILO),继承于Vector(List)

十、Euqal方法和==的区别

  • 相同:Object类的equal方法与==相同的含义;判断的是基本数据类型的值或者所指向对象的地址值
    test.getClass().getName()+"@"+Integer.toHexString(test.hashCode())
  • 不同:在String和包装类中,equal被重写了,判断了是其值(内容) toString是否相同

HashMap<Object,Object>原理

十一、HashMap的工作原理 (看源码)

  • Node<K,V>[ ] 数组链表
  • HashMap< key,Map.entry > entry
  • 我们知道在Java最常用的两种数据结构为数组和链表(模拟指针 Node)
  • HashMap的底层也是由数组和链表组成的。我理解为其Hashcode是数组索引,根据key的HashCode寻找到数组的对应位置;
  • 而存储的Node<K,V>[ ],可以表示为HashMap<key,Map.entry> entry 为一个键值对对象

HashMap怎么添加一个键值对(看源码)

  • 我们使用put(key,value)方法来存储到HashMap中,HashMap会先调用hashCode()的方法判断哈希值是否相同;
  • 如果哈希值不同,则判定该key是不同的;
  • 如果key(必须为Object对象)相同,则调用equal方法进行判断,
  • 如果equal返回false,那么会以hashcode为坐标,Node链表(Bucket)
  • 如果返回true,那么新值会覆盖旧值;
  • 判断如果当前bucket的位置链表长度大于8的话就将此链表变成红黑树。

HashMap怎么获得一个键值对

我们使用get(key)获得value,key会通过hashcode在Node<K,V>数值中快速的查询到对应的Node<K,V>,可以通过equal方法一个一个key的判断获得对应的value

HashMap默认容量是多少

默认容量是16,负载因子是0.75,就是当容量达到了12就会进行扩容,拓展为原容量的2倍。

Java集合框架知识点相关推荐

  1. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  2. 容器(一)剖析面试最常见问题之 Java 集合框架

    转载自https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/Java%E9%9B%86%E5%90%88%E ...

  3. java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...

    一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...

  4. Java集合框架之四大接口、常用实现类,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  5. android java框架_【阿里P8大牛教你Android入门之路(java篇)】——Java集合框架(系列篇1)...

    一.前言 本部分内容主要包含以下: Java集合 Java反射 Java注解 Java反射 Java IO 其他面试点 以上内容都是Java中的基础知识,对于Java的学习很有帮助.其中集合.反射.I ...

  6. Java集合查找Map,Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  7. 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析

    引言 好了,步入正题,上篇文章Java 集合框架(2)---- List 相关类解析中我们一起看了一下 List 接口的相关具体类(ArrayList.LinkedList-.),这篇开始我们开始探索 ...

  8. Java 集合框架(8)---- 总结

    文章目录 前言 集合类别 线性集合类 ArrayList LinkedList .Queue.Deque Vector Stack 映射集合类 HashMap TreeMap LinkedHashMa ...

  9. 「Java面试题精华集」1w字的Java集合框架篇(2022最新版)附PDF版

    昨天晚上终于把 Java 集合框架部分的的知识点肝完了,转换成 PDF 一共 25 页,后台回复:"面试突击" 即可免费获取下载地址(同样提供了夜间阅读版本). 集合概述 Java ...

  10. 不必东奔西走,Java 集合框架看这一篇就够了

    Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的:Collection 和 Map 顾名思义,容器就是用来存放数据的. 那么这两大接口的不同之处在于: Collecti ...

最新文章

  1. http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
  2. nginx防mysql注入_nginx防止sql注入
  3. 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...
  4. java-四则运算,自动出题(4)
  5. android jni jstring 转 char*
  6. bzoj2467生成树
  7. JAVA的方法的定义和调用
  8. python小技巧积累--题库(持续更新)
  9. 教你一个快速视频处理的神器:Python moviepy
  10. 如何让程序一直运行_VBA程序正式运行前,要该如何进行调试呢?
  11. SWAT模型教程---土地利用、土壤数据、气象数据的处理
  12. Java多线程面试知识点汇总(超详细总结)
  13. 8.25 ccpc 比赛总结
  14. Java+控制台 商城销售系统
  15. 苹果电脑QQ邮件服务器,mac电脑如何添加qq邮箱图文教程
  16. 圆拟合Taubin fit 方法
  17. 咦,为什么我的事务回滚不了?
  18. python做游戏服务器_浅谈如何做一个游戏服务器
  19. 10qbt超导量子计算机,南京大学于扬、朱诗亮团队在超导量子比特中实现参数空间的新型磁单极...
  20. matlab灰度图像分割标记,matlab – 分割灰度图像

热门文章

  1. Python3下的WIFI密码爆破
  2. 专利申请模板(技术交底书)
  3. 无限弹窗(python)
  4. 破圈了!完美日记凭什么让周迅成为全球品牌代言人
  5. 使用python生成 gif 格式的动图
  6. 计算机编程告白,程序员的520,五个表白代码,一看就会
  7. 多商户商城小程序源码有何优势?
  8. oracle餐厅网络点餐系统_开餐厅,餐饮老板到底要怎么选餐饮管理系统?
  9. Keil系列教程(汇总)
  10. mybatis3的中文官方文档