韩顺平0基础学java——第26天

news2024/11/16 3:45:42

p523-547


HashSet扩容时,只要节点到达了阈值就会扩,而不是数组长度到了才扩。

比如长16的数组,索引1放了8个,索引3放了4个,我再加一个他就会扩容。

另外谁能告诉我老师的debug界面是怎么设置的吗==忘光了

HashSet存放元素的规定

Map接口

加油啊马上就可以坦克大战了。

Map接口下存放的是双列集合!

Map接口实现类的特点[很实用]
注意:这里讲的是JDK8的Map接口特点Map_.java
1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
2) Map 中的key和value可以是任何引用类型的数据,会封装到HashMap$Node·对象中
3)Map中的key 不允许重复,原因和HashSet一样,前面分析过源码.

4) Map中的value可以重复
5) Map 的key 可以为null, value 也可以为null,注意key为null, 只能有一个,value 为null,可以多个.
6)常用String类作为Map的key
7) key 和 value之间存在单向一对一关系,即通过指定的key 总能找到对应的value
8)Map存放数据的key-value示意图,一对k-v是放在一个HashMap$Node中的,有因为Node 实现了Entry 接口,有些书上也说一对k-v就是一个Entry(如图)

实际上,HashMap才是本体,Set建立了一个集合Entry,指向了它。为什么可以这么搞?因为HashMap$Node implements Map.Entry,那么就可以创建一个Entry实例...

这么做是为了方便遍历

Map map = new HashMap();
map.put("no1","hso");//key-value的关系
map.put("no1","zsf");
System.out.println(map);//当有相同的key时,等价于替换。但是map中的value是可以重复的。

一句话总结:key不能重名(身份证号),value爱放啥放啥 

Map遍历方式

1)containsKey:查找键是否存在

2)keySet:获取所有的key,通过key获取value

3) entrySet:获取所有关系

4)values:获取所有的值

我脑阔都是昏的


HashMap小结


1) Map接口的常用实现类:HashMap、Hashtable和Properties.

2) HashMap是 Map接口使用频率最高的实现类。
.3) HashMap是以 key-val对的方式来存储数据[案例Entry ]
4)kev不能重复,但是是值可以重复,允许使用null键建和null值。
5)如果添加相同的key,则会覆盖原来的key-val ,等同于修改.(key不会替换,val会替换)

6)与HashSet一样,(底层是数组+链表+红黑树)不保证映射的顺序,因为底层是以hash表的方式来存储的.
7) HashMap没有实现同步,因此是线程不安全的(方法没有做同步互斥操作)

HashMap底层机制及源码剖析


HashMapSource.java先说结论-》debug>扩容机制[和HashSet相同]
1) HashMap底层维护了Node类型的数组table,默认为null

2)当创建对象时,将加载因子(loadfactor)初始化为0.75.
3)当添加key-val时,通过key的哈希值得到在table的索引。然后判断该索引处是否有元素,
如果没有元素直接添加。如果该索引处有完素,继续判断该元素的key是否和准备加入的key相等,如果相等,则直接替换val;如果不相等需要判断是树结构还是链表结构,做出相应处理。如果添加时发现容量不够,则需要扩容。
4)第1次添加,则需要扩容table容量为16,临界值(threshold)为12.
5)以后再扩容,则需要扩容table容量为原来的2倍,临界值为原来的2倍,即24,依次类推.6)在Java8中,如果一条链表的元素个数超过TREEIFY_THRESHOLD(默认是8),并table的大小 >= MIN_TREEIFY_CAPACITY(默认64),就会进行树化(红黑树)

所有哈希码相同的对象会被存放在同一个桶中。在你的情况下,10个 hashCode 相同但值不同的对象将被放在同一个桶里,形成一个链表或者红黑树的节点序列。

当桶中存储的元素数量达到一定阈值(通常是8个),链表会转换为红黑树,以提高查找效率。

当你使用 HashMapget 方法时,会首先计算键的哈希码,然后根据哈希码找到对应的桶。接着,会在桶中的链表或红黑树中搜索具有相同哈希码且通过 equals 方法相等的对象。

Map接口实现类-Hashtable

1)存放的元素是键值对:即 K-V
2) hashtable的键和值都不能为null,否则会抛出NullPointerException

3) hashTable使用方法基本上和HashMap一样
4)hashTable是线程安全的,hashMap是线程不安全的

5)简单看下底层结构

        1.底层又一个数组,是Hashtable$Entry[ ],初始化为11,临界值11*0.75=8

        2.扩容rehash()

Map接口实现类-Properties

1. Properties类继承自Hashtable类并且实现了Map接口,也是使用一种健值对的形式来保存数据。
2.他的使用特点和Hashtable类似,键和值都不能为null,否则会抛出NullPointerException 
3. Properties还可以用于从xxx.properties 文件中,加载数据到Properties类对象,并进行读取和修改
4、说明:工作后x00x.properties文件通常作为配置文件,这个知识点在IO流举例,有兴趣可先看文章

 如何通过key来获取value:

添加put,删除remove,修改:对应key来put,清空clear


总结

===开发中如何选择集合实现类(记住)===


在开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合实现类特性进行选择,分析如下:
1)先判断存储的类型(一组对象或一组键值对)

2)一组对象:Collection接口
允许重复:List
        增删多:LinkedList[底层维护了一个双向链表]
        改查多: ArrayList[底层维护 Object类型的可变数组]
不允许重复:Set
        无序:HashSet[底层是HashMap,维护了一个哈希表即(数组+链表+红黑树)】

        排序:TreeSet
        插入和取出顺序一致:LinkedHashSet,维护数组+双向链表
3)一组键值对:Map
        键无序: HashMap [底层是:哈希表jdk7:数组+链表,jdk8:数组+链表+红黑树]

        健排序:TreeMap
        键插入和取出顺序一致:LinkedHashMap

        读取文件Properties

TreeSet

1.当我们使用无参构造器创建TreeSet时,仍然是无序的、

2.当我们希望添加的元素,按照字符串大小来排序

        使用TreeSet提供的构造器,可以传入一个比较器(匿名内部类)

TreeSet ts = new TreeSet(new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
        Em e1 = (Em)o1;
        Em e2 = (Em)o2;
        return e1.getName().length()-e2.getName().length();
    }
});
ts.add(new Em("madk",33,1000));
ts.add(new Em("dk",353,1000));
ts.add(new Em("mdk",8343,1000));
ts.add(new Em("k",323,1000));
System.out.println(ts);

但是这个代码不对哈!老师用的String比较的

TreeMap

和TreeSet差不多,就是多了个value可以自己设置。

修改它的compare之后(传入匿名内部类后)是按照key在比较的、

为什么不能比value?

Collections工具类

. Collections工具类介绍
1)Collections是一个操作 Set、List和Map等集合的工具类
2) Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改争操作
排序操作:(均为static方法)

常用方法(一)
        1) reverse(List):反转List中元素的顺序
        2) shuffle(List):对List集合元素进行随机排序
        3) sort(List):根据元素的自然顺序对指定List集合元素按升序排序:首字符顺序
        4) sort(List,Comparator):根据指定的Comparator产生的顺序对List 集合元素进行排序(匿名内部类又来了)
        5) swap(List,int,int):将指定list 集合中的i处元素和j处元素进行交换

常用方法(二)

        1)Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
        2)Object max(Collection,Comparator):根据Comparator 指定的顺序,返回给定集合中的最大元素。
        3)Object min(Collection)
        4)Object min(Collection,Comparator)
        5)int frequency(Collection,Object):返回指定集合中指定元素的出现次数
        6)void copy(List dest,List src):将src中的内容复制到dest中(?你来搞笑的吗)
        7) boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List 对象的所有旧值
    

终于结束了,呕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1839690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《合金弹头:觉醒》横空出世,腾讯天美工作室携手SNK再塑经典

原标题:腾讯携手SNK发布游戏新作《合金弹头:觉醒》7月18日正式发布 易采游戏网6月19日消息:游戏界迎来一则激动人心的消息,由SNK正版授权,腾讯天美工作室研发的横版动作射击手游《合金弹头:觉醒》正式登陆S…

驾校在线考试系统源码 手机+PC+平板自适应

Thinkphp在线考题源码 驾校在线考试系统 手机PC平板 自适应,机动车驾驶培训学校驾校类网站源码带手机端 运行环境:phpmysql 内附安装说明 驾校在线考试系统源码 手机PC平板自适应

浅谈目标检测之YOLO(You Only Look Once)v1

简介:本文章要介绍的YOLOv1算法,它与之前的目标检测算法如R-CNN等不同,R-NN等目标检测算法是一种两阶段(two-stage)算法,步骤为先在图片上生成候选框,然后利用分类器对这些候选框进行逐一的判断…

shell中的流程控制

条件判断在流程控制中的重要性 有了条件判断才能进行if判断即分支流程,才能进行case的多分支流程,才能进行for循环和while循环。 单分支流程判断 如上图所示,在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令&#x…

FPGA中复位电路的设计

复位电路也是数字逻辑设计中常用的电路,不管是 FPGA 还是 ASIC 设计,都会涉及到复位,一般 FPGA或者 ASIC 的复位需要我们自己设计复位方案。复位指的是将寄存器恢复到默认值。一般复位功能包括同步复位和异步复位。复位一般由硬件开关触发引起…

把Deepin塞进U盘,即插即用!Deepin To Go来袭

前言 小伙伴之前在某篇文章下留言说:把Deepin塞进U盘的教程。 这不就来了吗? 事实是可以的。这时候你要先做点小准备: 一个大小为8GB或以上的普通U盘 一个至少64GB或以上的高速U盘 一个Deepin系统镜像文件 普通U盘的大概介绍&#xff1…

Xtuner微调

环境安装 studio-conda xtuner0.1.17 conda activate xtuner0.1.17 进入家目录 (~的意思是 “当前用户的home路径”) cd ~ 创建版本文件夹并进入,以跟随本教程 mkdir -p /root/xtuner0117 && cd /root/xtuner0117 拉取 0.1.17 的版…

海外盲盒APP开发,盲盒出海热!

当下,盲盒作为一种热门的娱乐休闲模式,在全球消费市场中都非常火热,各种热门盲盒商品刚一上线就受到了秒杀,受到了各地年轻消费者的追捧! 盲盒全球化对于我国盲盒企业来说是一个新的机会,有助于我国盲盒快…

C/S、B/S架构(详解)

一、CS、BS架构定义 CS架构(Client-Server Architecture)是一种分布式计算模型,其中客户端和服务器之间通过网络进行通信。在这种架构中,客户端负责向服务器发送请求,并接收服务器返回的响应。服务器则负责处理客户端的…

利用Python爬取天气数据并实现数据可视化,一个完整的Python项目案例讲解

要使用Python爬取天气数据并进行制图分析分几个步骤进行: 选择数据源:首先,你需要找到一个提供天气数据的API或网站。一些常见的选择包括:OpenWeatherMap、Weatherbit、Weather Underground等。 安装必要的库:你需要安…

数据库 | 试卷五试卷六试卷七

1. 主码不相同!相同的话就不能唯一标识非主属性了 2.从关系规范化理论的角度讲,一个只满足 1NF 的关系可能存在的四方面问题 是: 数据冗余度大,插入异常,修改异常,删除异常 3.数据模型的三大要素是什么&…

PythonWeb前端

摘要 学校的一门选修课,PythonWeb开发从入门到实践,用到的技术有Python,Flask,MySQL,前端三件套等,但因为是选修课,所以都只涉及到了一点点 Web前端基础 1.Web工作原理 概念: Web,万维网,一…

第21篇 Intel FPGA Monitor Program的使用<四>

Q:如何编译运行创建好的Intel FPGA Monitor Program工程呢? A:上一篇的Nios II汇编语言简易应用程序创建完成后,点击Intel FPGA Monitor Program的Action-->Compile即编译程序,在Info&Errors区域显示编译结果…

软件产品进行确认测试有什么好处?第三方软件测试机构分享

软件确认测试是一项旨在验证软件是否符合预期需求和规格的测试活动。通过确认测试,您可以确保软件的功能、性能和用户界面的符合程度,从而降低软件发布后出现问题的风险。 一、软件产品进行确认测试的好处   1、减少软件发布后修复问题的成本。通过及…

SpringBoot整合Minio(支持公有及私有bucket)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBoot整合Minio(支持公有及私有bucket) ⏱️ 创作时间&#xff1…

机器学习课程复习——决策树

Q:这三个算法哪一个可以用来做回归? CART Q:这学期学过的分类算法有哪些? 支持向量机、决策树、k近邻、逻辑回归、朴素贝叶斯、ANN (注意区分分类算法与聚类算法) Q:计算题 根据以上条件,生成相应的决策树 1. ID3算法

Jenkins教程-5-gitee自动化测试任务构建

上一小节我们学习了Jenkins构建gitlab自动化测试任务的方法,本小节我们讲解一下gitee自动化测试任务的构建方法。 接下来我们以windows系统为例,讲解一下构建实际自动化测试任务的具体步骤。 安装git和gitee插件 点击进入Jenkins插件管理页面 安装完插…

mac禁用电池睡眠-mac盒盖连接显示器

mac禁用电池睡眠-mac盒盖连接显示器-mac断点盒盖连接显示器 讲解:mac盒盖的时候连接显示器会睡眠并断开和显示器的连接,只有在电池->选项->选择使用电源适配器的时候防止睡眠,才可以连接电源线外界显示器 但是苹果的电池相当于手机电…

Linux使用lrzsz实现虚拟机和本机进行文件传输

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、lrzsz是什么?二、使用步骤1.下载lrzsz2.文件传输 前言 提示:这里可以添加本文要记录的大概内容: 使用lrzsz代替xfpt进行…

大模型时代的具身智能系列专题(一)

通用具身机器人 具身智能定义 从图灵定义看,知识由感知、智能体环境交互获得,具身智能要拥有足够的知识完成机器人任务。从字面上理解就是具有身体的智能,可以从交互中学习并有可能涌现新能力。近期的具身智能更多和大模型和端到端有关&…