当前位置: 首页 > news >正文

建网站的8个详细步骤站长网站推广

建网站的8个详细步骤,站长网站推广,顺义区住房城乡建设委 房管局 官方网站,公司做铸造的招聘网站都有哪些前言 List、Set、HashMap作为Java中常用的集合,需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中Set集合的面试问题,结合源码分析题目背后的知识点。 关于List的博客文章如下: Java进阶(List)——面试时L…

在这里插入图片描述

前言

List、Set、HashMap作为Java中常用的集合,需要深入认识其原理和特性。

本篇博客介绍常见的关于Java中Set集合的面试问题,结合源码分析题目背后的知识点。

关于List的博客文章如下:

  • Java进阶(List)——面试时List常见问题解读 & 结合源码分析

关于的Set的博客文章如下:

  • Java进阶(Set)——面试时Set常见问题解读 & 结合源码分析

关于HaseMap的博客文章如下:

  • Java进阶(HashMap)——面试时HashMap常见问题解读 & 结合源码分析
  • Java进阶(ConcurrentHashMap)——面试时ConcurrentHashMap常见问题解读 & 结合源码分析 & 多线程CAS比较并交换 初识

其他相关的Set的文章如下:

  • Java学数据结构(3)——树Tree & B树 & 红黑树 & Java标准库中的集合Set与映射Map & 使用多个映射Map的案例

目录

  • 前言
  • 引出
  • 1. 描述一下HashSet的底层原理?
    • 构造方法
    • add方法
  • 2. map.put方法,静态常量PRESENT
  • 3. map.remove key方法,PRESENT进行比较
  • 4. HashSet的去重原理?
  • 5. 如何选择HashSet 或 TreeSet?
  • 6. 如何得到一个线程安全的Set集合?
  • 总结

引出


1.特点:无序,去重,非线程安全;
2.底层:HashMap的Key值实现的;
3.map.put方法,静态常量PRESENT,新值替换旧值;
4.map.remove key方法,如果KEY不存在时,则返回的是null,如果KEY存在时,返回的就是e.value,即PRESENT,返回true成功,返回false不成功;
5.去重原理:先判断hash值,再通过==或者equals判断,整体如果返回true,则为重复元素;
6.无序的则采用HashSet ,有序的则采用TreeSet;
7.线程安全的set:Collections.synchronizedSet(new HashSet<>());

1. 描述一下HashSet的底层原理?

  1. HashSet的特点:无序,去重,非线程安全
  2. HashSet 底层是用HashMap的Key值实现的,也有上面的3大特征;

构造方法

无参和代参构造方法都会初始化这个HashMap

无参的构造方法,调用了HashMap方法

在这里插入图片描述

有参的构造方法也是,调用了HashMap方法

在这里插入图片描述

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上在这里插入图片描述

add方法

在这里插入图片描述

add方法中可以看出调用HashMap的put方法,key为放入元素,值为常量PRESENT

在这里插入图片描述

2. map.put方法,静态常量PRESENT

既然hashset基于hashmap实现,你说一下 hashset的add方法中,为什么要在map.put的val上放上一个Object类型的静态常量PRESENT?

在这里插入图片描述

HashSet底层调用了map的put方法,传入了存储的对象和PRESENT常量,那我们进入put方法继续查看

在这里插入图片描述

put方法内调用了putVal方法,PRESENT常量为形参value,继续进入查看

在这里插入图片描述

	if (e != null) { // existing mapping for key//把旧数据存储到oldValueV oldValue = e.value;//如果说存储的位置上已经有元素了if (!onlyIfAbsent || oldValue == null)//新元素会替代旧元素   新KEY替代KEYe.value = value;afterNodeAccess(e);//返回旧元素数据return oldValue;}++modCount;if (++size > threshold)resize();afterNodeInsertion(evict);//如果说上面的if结构没有执行,那么就说明这个位置上没有元素,则新增成功,返回nullreturn null;

在这里插入图片描述

在这里插入图片描述

public boolean add(E e) {//上面的方法返回值决定了HashSet的add方法到底返回true还是falsereturn map.put(e, PRESENT)==null;}
  1. 此方法内部明确箭头标处的原理,value就是PRESENT,如果进入这个if结构,则说明这个位置上已经存在该key,则会用value替换之前的旧值,然后返回旧值oldValue,否则会返回null;
  2. 至此,我们可以看出此方法的返回值是PRESENT或者是null,如果为PRESENT则说明KEY已存在,则add方法就会返回false(此处元素put还是成功的,只是新值替换旧值),返回null则add返回true,此KEY不存在,代表存储新的KEY-VALUE;

3. map.remove key方法,PRESENT进行比较

既然hashset基于hashmap实现,你说一下 hashset的remove方法中,为什么要在map.remove key 完了之后要和PRESENT进行一个等值比较呢?

在这里插入图片描述

在这里插入图片描述

  1. 从HashMap的remove方法中可以看出,方法返回的是e.value或者null,与add方法中的原理一起联想,则会明白,如果KEY不存在时,则返回的是null,如果KEY存在时,返回的就是e.value,即PRESENT
  2. 所以在HashSet在判断此返回值==PRESENT,如果相等则返回true,说明此KEY是存在的,删除成功返回true,如果返回值是null,那么null=PRESENT则返回的肯定是false,那么代表此KEY不存在,删除自然不成功,返回false;

在这里插入图片描述

public V remove(Object key) {Node<K,V> e;//判断了一下,如果removeNode删除得到的是null,说明此KEY不存在,方法返回nullreturn (e = removeNode(hash(key), key, null, false, true)) == null ?//否则返回e.value   就是 PRESENTnull : e.value;}
public boolean remove(Object o) {//因为HashMap删除成功返回的是PRESENT , ==PRESENT 则结果为true 代表删除成功//否则返回的是null , 返回false  删除失败return map.remove(o)==PRESENT;}

4. HashSet的去重原理?

在这里插入图片描述

  1. HashMap中putVal方法中有这么一段代码判断,去重原理在于hashcode的判断和equals方法的判断
  2. 先判断hash值,再通过==或者equals判断,整体如果返回true,则为重复元素

5. 如何选择HashSet 或 TreeSet?

无序的则采用HashSet ,有序的则采用TreeSet

6. 如何得到一个线程安全的Set集合?

Set datas = Collections.synchronizedSet(new HashSet<>());

在这里插入图片描述


总结

1.特点:无序,去重,非线程安全;
2.底层:HashMap的Key值实现的;
3.map.put方法,静态常量PRESENT,新值替换旧值;
4.map.remove key方法,如果KEY不存在时,则返回的是null,如果KEY存在时,返回的就是e.value,即PRESENT,返回true成功,返回false不成功;
5.去重原理:先判断hash值,再通过==或者equals判断,整体如果返回true,则为重复元素;
6.无序的则采用HashSet ,有序的则采用TreeSet;
7.线程安全的set:Collections.synchronizedSet(new HashSet<>());

http://www.hrbkazy.com/news/55531.html

相关文章:

  • 用js做的网站页面seo兼职招聘
  • 芜湖做网站哪个公司好增加百度指数的四种方法
  • 怎样做网站认证合肥seo按天收费
  • 做景观设计比赛的网站可以免费打开网站的软件下载
  • wordpress 下工具下载天津seo优化公司哪家好
  • 做网站需要招聘内容范本线上推广的渠道有哪些
  • 张家界网站建设如何写软文
  • 自己做的网站怎样链接数据库网上店铺的推广方法有哪些
  • 衡阳电商网站建设新闻最近的新闻
  • 网站设计与管理方向色盲测试图片60张
  • 网站设计思路刚刚发生 北京严重发生
  • 网站建设一般花多少费用长沙网络营销学校
  • 北京网站建设手机app电子商务长沙网络推广营销
  • 做卡贴的网站宁波网站建设公司哪家好
  • 做兼职发传单在哪个网站好招聘舆情分析
  • 建站自学电脑培训班一般要学多久
  • 重庆建设工程信息网安全监督特种人员一aso优化什么意思是
  • 免费做手机网站有哪些网址查询
  • 苏州网站seoseo技术快速网站排名
  • 华容县住房和城乡建设局网站软文推广发布
  • 复制代码做网站成都网站seo
  • 做动态网站费用电工培训
  • 如何在微信内做网站百度官方网站下载
  • 网站模板双语快速排名生客seo
  • js可以做动态网站吗搜搜
  • 架设网站费用我想在百度上发布广告怎么发
  • wordpress商城模板郑州seo全网营销
  • 网后台的网站怎么做网络新闻发布平台
  • 我找别人做的网站现在不管了怎么办百度网站域名注册
  • 电子商务网站的基本流程福州seo快速排名软件