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

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() {@Overridepublic 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.rhkb.cn/news/354262.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring+Vue的前后端分离的计算器

麻雀虽小,五脏俱全 该项目已部署上线:http://calculator.wushf.top/ 并通过Gitee Go流水线实现持续部署。 需求分析 表达式求值 支持加减乘除四则运算、支持高精度 获取日志 Api文档定义 前后端分离,人不分离 通过Apifox定义接口细节&#…

(el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程

Ⅰ、Element-plus 提供的Select选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供Select组件情况&#xff1a; 其一、Element-ui 自提供的Select代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template><div class"f…

闹大了!高考作文“人工智能与AI”引发争议,专家喊话,部分考生家长无奈,直呼:“太不公平了!这哪里是考作文,分明是在考城乡差距啊!”

闹大了&#xff01;高考作文“人工智能与AI”引发争议&#xff0c;专家喊话&#xff0c;部分考生家长无奈&#xff0c;直呼&#xff1a;“太不公平了&#xff01;这哪里是考作文&#xff0c;分明是在考城乡差距啊&#xff01;” ​高考&#xff0c;本该是最公平的战场&#xff…

IO流2.

字符流-->字符流的底层其实就是字节流 public class Stream {public static void main(String[] args) throws IOException {//1.创建对象并关联本地文件FileReader frnew FileReader("abc\\a.txt");//2.读取资源read()int ch;while((chfr.read())!-1){System.out…

MySQL系列-语法说明以及基本操作(一)

1、前言 主要讲解MySQL的基本语法 官网文档 https://docs.oracle.com/en-us/iaas/mysql-database/doc/getting-started.html 关于MySQL的基本语法&#xff0c;关于数据类型、表的操作、数据操作、事务、备份等&#xff0c;可参考 http://www.voidme.com/mysql 2、数据类型 数…

多环境镜像晋级/复用最佳实践

作者&#xff1a;木烟 本文主要介绍镜像构建部署场景&#xff0c;多环境镜像晋级/复用最佳实践&#xff0c;保证“所发即所测”。 场景介绍 应用研发场景有效地管理镜像产物是确保软件快速、安全、可靠部署的关键环节。通常一个应用研发需要经过测试、预发、生产各个阶段&am…

PHP转Go系列 | 变量常量的使用姿势

大家好&#xff0c;我是码农先森。 变量 在 PHP 语言中&#xff0c;初始化变量虽然只有一行&#xff0c;其实包含了两步&#xff0c;一是声明变量&#xff0c;二是赋值给变量&#xff0c;同一个变量可以任意再赋值任何类型的数据。 <?php// 初始化变量 $name "man…

防爆气象仪的工作原理

TH-WFB5矿山气象传感器在矿山安全监测系统中扮演着至关重要的角色&#xff0c;它们能够及时发现异常情况&#xff0c;为矿山的安全运营提供可靠的数据支持。矿山气象传感器能够实时监测矿山环境中的风速、风向、温度、湿度和大气压力等关键气象参数。这些传感器采用先进的传感技…

网页五子棋对战项目测试(selenium+Junit5)

目录 网页五子棋对战项目介绍 网页五子棋对战测试的思维导图​ 网页五子棋对战的UI自动化测试 测试一&#xff1a;测试注册界面 测试二&#xff1a;测试登陆界面 测试三&#xff1a;测试游戏大厅界面 测试四&#xff1a;测试游戏房间界面以及观战房间界面 测试五&#…

之所以选择天津工业大学,因为它是双一流、报考难度适宜,性价比高!天津工业大学计算机考研考情分析!

天津工业大学&#xff08;Tiangong University&#xff09;&#xff0c;简称“天工大”&#xff0c;位于天津市&#xff0c;是教育部与天津市共建高校、国家国防科技工业局和天津市共建的天津市重点建设高校、国家“双一流”建设高校、天津市高水平特色大学建设高校、中国研究生…

多态性(Java)

本篇学习面向对象语言的第三个特性——多态。 目录 1、多态的概念 2、继承多态实现条件 3、重写 4、重新与重载的区别&#xff1a; 5、向上转移和向下转型 5、1向上转型&#xff1a; 5、2 向下转型 1、多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态…

从零开始! Jupyter Notebook的安装教程

&#x1f680; 从零开始! Jupyter Notebook的安装教程 摘要 &#x1f4c4; Jupyter Notebook 是一个广受欢迎的开源工具&#xff0c;特别适合数据科学和机器学习的开发者使用。本文将详细介绍从零开始安装 Jupyter Notebook 的步骤&#xff0c;包括各种操作系统的安装方法&am…

从钉钉到跨境电商领域的技术演变,HHO如何通过NineData实现全球化业务布局

两氢一氧&#xff08;HHO&#xff09;是一家跨境出海电商平台&#xff0c;专注于通过数字化手段连接全球市场和中国优质供应链&#xff0c;致力于打造数字化时代的全球化新品牌。 创始人陈航&#xff0c;曾任钉钉 CEO 并成功打造行业领先的亿级活跃用户产品--钉钉。离开阿里后创…

Game-Fi 新贵 MetaArena 项目全解析:重塑区块链游戏生态

在区块链技术迅猛发展的浪潮中&#xff0c;全球各行业都在探索如何利用这一革命性技术来提升效率、降低成本&#xff0c;并创造新的商业模式。游戏行业作为数字娱乐的核心领域之一&#xff0c;也在经历前所未有的变革。尽管传统游戏巨头如Steam和任天堂已推出Web3元宇宙游戏产品…

Ceph入门到精通-ceph边缘集群你听说过嘛?

边缘集群是一种经济高效的对象存储配置解决方案。 Red Hat 支持以下 Red Hat Ceph Storage 集群的最低配置: 具有两个 SSD 副本的三节点集群。 具有三个 HDD 副本的四节点群集。 具有 EC 池的四节点集群,具有 2+2 配置。 对于较小的群集,由于使用量和复原能力的损失,利用率…

13.2 Go 接口的动态性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

RK3588 代码中导入torch报错

RK3588 代码中导入torch报错 使用RK3588测试官方的YOLOv8,出现下面的问题 发现是dfl函数中导入torch的时候产生的&#xff0c;但是我在python终端上执行导入torch并没有发生报错 Traceback (most recent call last):File "infer.py", line 243, in <module>b…

数据结构-算法和算法分析

目录 前言一、算法1.1 算法与程序1.2 算法描述方法1.3 算法特性1.4 算法设计的要求 二、算法分析2.1 算法时间效率的度量2.1.1 事前分析方法算法的渐进时间复杂度算法时间复杂度分析例子算法最坏时间复杂度时间复杂度的计算规则 2.2 算法空间效率的度量 总结 前言 程序 数据结…

docker回顾--docker compose详细解释,安装,与常用命令

文章目录 Docker compose简介什么是Docker compose核心概念优势 安装常用命令总结 Docker compose简介 什么是Docker compose Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它使得开发者可以使用一个单独的 YAML 文件来定义应用所需的所有服务、网络和卷&a…

发力采销,京东的“用户关系学”

作者 | 曾响铃 文 | 响铃说 40多岁打扮精致的城市女性&#xff0c;在西藏那曲的偏远农村&#xff0c;坐着藏民的摩托车&#xff0c;行驶在悬崖边的烂泥路上&#xff0c;只因为受顾客的“委托”&#xff0c;要寻找最原生态的藏区某款产品。 30多岁的憨厚中年男性&#xff0c;…