Java集合框架知识点
一、集合框架体系图
二、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,再其基础上新增了一条双向链表,使得上面的结构可以保持绝对的插入顺序
- LinkedHashMap:
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集合框架知识点相关推荐
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- 容器(一)剖析面试最常见问题之 Java 集合框架
转载自https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/Java%E9%9B%86%E5%90%88%E ...
- java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...
一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...
- Java集合框架之四大接口、常用实现类,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- android java框架_【阿里P8大牛教你Android入门之路(java篇)】——Java集合框架(系列篇1)...
一.前言 本部分内容主要包含以下: Java集合 Java反射 Java注解 Java反射 Java IO 其他面试点 以上内容都是Java中的基础知识,对于Java的学习很有帮助.其中集合.反射.I ...
- Java集合查找Map,Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析
引言 好了,步入正题,上篇文章Java 集合框架(2)---- List 相关类解析中我们一起看了一下 List 接口的相关具体类(ArrayList.LinkedList-.),这篇开始我们开始探索 ...
- Java 集合框架(8)---- 总结
文章目录 前言 集合类别 线性集合类 ArrayList LinkedList .Queue.Deque Vector Stack 映射集合类 HashMap TreeMap LinkedHashMa ...
- 「Java面试题精华集」1w字的Java集合框架篇(2022最新版)附PDF版
昨天晚上终于把 Java 集合框架部分的的知识点肝完了,转换成 PDF 一共 25 页,后台回复:"面试突击" 即可免费获取下载地址(同样提供了夜间阅读版本). 集合概述 Java ...
- 不必东奔西走,Java 集合框架看这一篇就够了
Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的:Collection 和 Map 顾名思义,容器就是用来存放数据的. 那么这两大接口的不同之处在于: Collecti ...
最新文章
- http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
- nginx防mysql注入_nginx防止sql注入
- 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...
- java-四则运算,自动出题(4)
- android jni jstring 转 char*
- bzoj2467生成树
- JAVA的方法的定义和调用
- python小技巧积累--题库(持续更新)
- 教你一个快速视频处理的神器:Python moviepy
- 如何让程序一直运行_VBA程序正式运行前,要该如何进行调试呢?
- SWAT模型教程---土地利用、土壤数据、气象数据的处理
- Java多线程面试知识点汇总(超详细总结)
- 8.25 ccpc 比赛总结
- Java+控制台 商城销售系统
- 苹果电脑QQ邮件服务器,mac电脑如何添加qq邮箱图文教程
- 圆拟合Taubin fit 方法
- 咦,为什么我的事务回滚不了?
- python做游戏服务器_浅谈如何做一个游戏服务器
- 10qbt超导量子计算机,南京大学于扬、朱诗亮团队在超导量子比特中实现参数空间的新型磁单极...
- matlab灰度图像分割标记,matlab – 分割灰度图像