首页 > 编程语言 >Java集合

Java集合

时间:2022-10-17 03:55:05浏览次数:73  
标签:1.7 Java HashMap 链表 线程 Hashtable 集合 null

集合框架

一. 继承体系

参考:

https://blog.csdn.net/qq_43294932/article/details/122997571

二. 必背题

HashMap的扩容机制?

在1.7之前HashMap底层是数组+链表的方式, 在1.7之后, 底层则是数组+链表或红黑树的方式实现的.

当数组长度大于64且链表长度大于8的时候, 链表会转化为红黑树. 否则, 当发生hash碰撞的时候, 会选择扩容, 然后重新分配元素位置.

加载因子默认是0.75, 数组大小默认是16, 每次扩容为原来的两倍.

Map, List, Set区别, 是否允许null键, null值.

map是以键值对的方式去存储数据, List则是以有序的方式存储数据, Set则是无序的.

HashSet底层借助了HashMap实现, 只不过value的值为默认的.

因此, HashMap允许一个null键, 多个null值, List允许多个null值, set则只允许一个null值.

HashMap是线程安全的吗, Hashtable呢?

HashMap不是线程安全的, Hashtable是线程安全的. 但Hashtable已经是过时的, 不推荐在开发中使用, 如果想使用集合并保证线程安全, 可以使用ConcurrentHashMap或者使用Collections的同步方法, 将集合转变为线程安全的.

Hashtable和ConcurrentHashMap的线程安全机制, 区别?

Hashtable底层借助synchronized实现线程安全. 因此, 同一时间只能有一个线程操作Hashtable, 效率上来说比ConcurrentHashmap低太多了.

而ConcurrentHashMap在1.7和1.8之间的实现方式也略有区别.

在1.7中, ConcurrentHashmap使用了segment + synchronized来保证线程安全, 锁是针对segment的, 因此效率上来说比Hashtable高16倍.

在1.8中, 使用 Node + CAS + synchronized来保证线程安全, 锁是针对链表或树的首节点的, 因此, 不发生hash碰撞的时候, 效率比1.7又提升了很多倍.

ArrayList和LinkedList的区别?

ArrayList是基于数组实现的, LinkedList是基于双向链表实现的.

前者基于索引的查找效率高, 后者插入和删除效率高.

了解Collections工具类吗?

三. 资料来源

https://blog.csdn.net/m0_67698950/article/details/125049914

https://www.cnblogs.com/crazymakercircle/p/16281251.html

标签:1.7,Java,HashMap,链表,线程,Hashtable,集合,null
From: https://www.cnblogs.com/wang-jifeng/p/16151746.html

相关文章

  • Java中的异常
    Java中的异常 try(  //监控区域,把可能出现异常的代码放到这里面)catch(想要捕获的异常的类型 定义个名字){  捕获到异常后进行的操作。}finally{  不管有......
  • java中的接口
    java中的接口 接口代码如下:在创建java文件的时候把里面的class换成interface,那么这个java文件就变成了接口接口的作用1.约束方法。2.定义一些方法,让不同的人实现。......
  • java中的抽象类
    java中的抽象类//在类名前加上abstract,那么这个类就变成了抽象类。//java的类是单继承的,但是他的接口可以多继承。//在方法前加上abstract,那么这个方法就变成了抽象方法......
  • Java中的static详解
    Java中的static详解packageoop.Demo07;​publicclassStudent{​  //静态代码块,在类创建的时候同时创建,只会执行一次,执行顺序为第一  static{    Sys......
  • Java 静态类、静态方法和静态变量
    (37条消息)Java静态类、静态方法和静态变量_winfredzen的博客-CSDN博客_静态方法在加载的时候会执行return(37条消息)java中引用数据类型有哪些?_xiaoming3526的博客-CS......
  • idea中使用阿里巴巴开发手册插件----Alibaba Java Coding Guidelines
    AlibabaJavaCodingGuidelines p3cp3c是阿里巴巴所研发的代码规范插件,规范基于《阿里巴巴Java开发手册》,在IntelliJIDEA的插件管理中直接搜索AlibabaJavaCodingG......
  • java中的instanceof和类型转换
    java中的instanceof和类型转换父类代码如下:packageoop.Demo06;​publicclassPerson{  publicvoidrun(){    System.out.println("run"); }}​ ......
  • java实现计算字符串表达式
    引言在java后端中,偶尔存在需要将一个字符串当成表单式来计算。本文中,实现了java后端如何执行字符串的表单式实现ScriptEngineManagermanager=newScriptEngineManage......
  • 01java入门
    java入门Java三大版本JavaSE:标准版(桌面程序,控制台开发)JavaME:嵌入式开发JavaEE:E企业级开发(web端,服务器开发)JDK、JRE、JVMJDK:包含JRE、JVM、java(解释器)、jav......
  • java_包装类
    包装类1.包装类的分类八种基本数据类型相应的引用类型—包装类==>可以调用类中的方法。基本数据类型==>包装类boolean==>Booleanchar==>Characterbyte==>......