双列集合Map的实现类

Map接口【和Collection接口并列】

Map接口

成员方法【实现于Map接口,TreeMap也可实现,这里以HashMap为例】

//HashMap实现类 :无序[HashSet底存原理] 哈希表
public class Demo1 {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();//添加键值对[put方法]map.put("张三",20);map.put("李四",20);//如果键一样,则后面的值会会覆盖前面的值map.put("张三",40);map.put("王五",20);System.out.println(map);//remove 根据键删除键值对元素,返回删除的键对应的值Integer value1 = map.remove("张三");System.out.println(value1);//clear清空/*map.clear();System.out.println(map);*///containsKeys判断集合中是否包含指定的键,并返回booleanboolean result1 = map.containsKey("张三");boolean result2 = map.containsKey("李四");System.out.println(result1);System.out.println(result2);//containsValue判断集合中是否包含指定的值,并返回booleanboolean result3 = map.containsValue(20);boolean result4 = map.containsValue(40);System.out.println(result3);System.out.println(result4);//isEmpty判断集合是否为空,并返回booleanboolean result5 = map.isEmpty();System.out.println(result5);//int size()集合的长度,集合中键值对的个数System.out.println(map.size());//keySet获取所有的键Set<String> keys = map.keySet();System.out.println(keys);//get(Key)获取键对应的值Integer value2 = map.get("张三");Integer value3 = map.get("李四");System.out.println(value2);System.out.println(value3);//entrySet获取所有的键值对Set<Map.Entry<String, Integer>> entries = map.entrySet();System.out.println(entries);}
}打印结果:
----------------------------------------------------------------
{李四=20, 张三=40, 王五=20}
40
false
true
true
false
false
2
[李四, 王五]
null
20
[李四=20, 王五=20]

Map集合遍历方法

//遍历HashMap
public class Demo3 {public static void main(String[] args) {//创建集合并添加元素HashMap<String, String> map = new HashMap<>();map.put("1号丈夫", "1号妻子");map.put("2号丈夫", "2号妻子");map.put("3号丈夫", "3号妻子");map.put("1号丈夫", "1号妻子");//第一中方法:键找值的方式//keySet获取所有的键//返回值为set集合[set为接口,集合类型为其具体的实现类]Set<String> keys = map.keySet();for (String key : keys) {String value = map.get(key);System.out.println(key + "..." + value);}System.out.println("----------------------------");//第二种方法:获取键值对对象//entrySet获取所有的键值对对象// //返回值为set集合[set集合存储的是键值对对象,Entry存储的是键和值]Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String,String> entry : entries) {System.out.println(entry.getKey() + "..." + entry.getValue());}}
}打印结果:
-----------------------------------------------------------------
1号丈夫...1号妻子
2号丈夫...2号妻子
3号丈夫...3号妻子
----------------------------
1号丈夫...1号妻子
2号丈夫...2号妻子
3号丈夫...3号妻子
实现类HashMap

1.特点:无序,双列,键唯一,值可重复,不可排序
2.底层原理:哈希表【链表,数组,[链表满8为]红黑树】

HashMap和HashSet一样底层为哈希表,默认比较为地址值,API有的类已经写好的我们就不需要重写,但我们自定义的类一般都需要重写HashCode方法

a.【HashMap默认比较键的地址值】

//HashMap存储对象
//保证键不重复
public class Demo4 {public static void main(String[] args) {HashMap<Student, String> map = new HashMap<>();Student student1 = new Student("JS", 1800);Student student2 = new Student("LQ", 2000);Student student3 = new Student("小汪", 18);Student student4 = new Student("小汪", 18);map.put(student1, "兽族");map.put(student2, "不死族");map.put(student3,"兽族");map.put(student4, "牛牛牛");//  public int hashCode() {//        int h = 0;//        for (Entry<K, V> entry : entrySet())//            h += entry.hashCode();//        return h;//    }Set<Map.Entry<Student, String>> entries = map.entrySet();for (Map.Entry<Student, String> entry : entries) {System.out.println(entry.hashCode());}//键值对遍历Set<Map.Entry<Student, String>> entries1 = map.entrySet();for (Map.Entry<Student, String> entry : entries) {System.out.println(entry.getKey() + "..." + entry.getValue());}}
}打印结果:
---------------------------------------------------------------
473594216
780099464
189191576
1314561244
Student{name='小汪', age=18}...牛牛牛
Student{name='LQ', age=2000}...不死族
Student{name='JS', age=1800}...兽族
Student{name='小汪', age=18}...兽族

b.【HashMap重写键的equals方法和hashCode方法比较键的属性值】

---------------------测试类代码不变---------------------------
public class Student {private String name;private int  age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;if (age != student.age) return false;return name != null ? name.equals(student.name) : student.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}
}打印结果:
--------------------------------------------------------------
14493644
20137578
746797
//键相同的时候,后面键对应的值就会覆盖前面的值
Student{name='小汪', age=18}...牛牛牛
Student{name='LQ', age=2000}...不死族
Student{name='JS', age=1800}...兽族

与HashSet的区别:重写针对的都是HashMap的键,其他步骤一样。

实现类TreeMap

1.特点:无序,双列,键唯一,值可重复,有排序功能
2.底层原理:红黑树
3.需要指定排序规则,API中有一些类已经实现了Comparable接口],给出了默认排序规则,如:Integer:数值大小[升序] String:字典顺序等

底层为红黑树会自动对键排序,需要指定排序顺序,有两种方式指定1.实现Comparable接口,重写compareTo方法2.创建比较器Comparator,重写compare方法

与TreeSet的区别:重写针对的都是TreeMap的键,其他步骤一样。

Map接口图解

在这里插入图片描述

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

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

相关文章

机器学习指标大汇总

转自&#xff1a; http://www.36dsj.com/archives/42271 作者&#xff1a;无影随想 在使用机器学习算法的过程中&#xff0c;针对不同场景需要不同的评价指标&#xff0c;在这里对常用的指标进行一个简单的汇总。 一、分类 1. 精确率与召回率 精确率与召回率多用于二分类问题。…

到底什么是分布式系统

转载自 到底什么是分布式系统分布式系统背景 说分布式系统必须要说集中式系统&#xff0c;集中式系统中整个项目就是一个独立的应用&#xff0c;整个应用也就是整个项目&#xff0c;所有的东西都在一个应用里面。 如下图所示如一个网站就是一个应用&#xff0c;最后是多个增加多…

Map集合相关应用

1.键盘录入一个字符串&#xff0c;求该字符串中每一个字符出现的次数。 要求&#xff1a;按照字母顺序打印 如: 录入的字符串为"apple"&#xff0c;打印 a(1) e(1) l(1) p(2) public class Demo4 {public static void main(String[] args) {//键盘录入Scanner sc n…

机器学习算法常用指标总结

转自&#xff1a; http://www.cnblogs.com/maybe2030/p/5375175.html#_label2 阅读目录 1. TPR、FPR&TNR 2. 精确率Precision、召回率Recall和F1值 3. 综合评价指标F-measure 4. ROC曲线和AUC 5. 参考内容 考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positi…

SLA服务可用性4个9是什么意思?怎么达到?

转载自 SLA服务可用性4个9是什么意思&#xff1f;怎么达到&#xff1f;SLA&#xff1a;服务等级协议&#xff08;简称&#xff1a;SLA&#xff0c;全称&#xff1a;service level agreement&#xff09;。是在一定开销下为保障服务的性能和可用性&#xff0c;服务提供商与用户间…

ROC和AUC介绍以及如何计算AUC

转自&#xff1a; http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC&#xff08;Receiver Operating Characteristic&#xff09;曲线和AUC常被用来评价一个二值分类器&#xff08;binary classifier&#xff09;的优劣&#xff0c;对两者的简单介绍见这里。这篇…

为什么Netty这么火?与Mina相比有什么优势?

转载自 为什么Netty这么火&#xff1f;与Mina相比有什么优势&#xff1f;Netty是什么&#xff1f;为什么这么火&#xff1f; Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架&#xff0c;Netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发…

一张图告诉你为什么是服务网关

转载自 一张图告诉你为什么是服务网关&#xff0c;文末有现金抽奖。网关服务是单一访问点&#xff0c;并充当多项服务的代理。服务网关启用了跨所有服务的路由转发、过滤和公共处理等。在微服务实践中远不止这点功能&#xff0c;它可以做到统一接入、流量管控、安全防护、业务隔…

offer复习日志

&#xff08;1&#xff09;复习mysql&#xff0c;只需要 2.5 个小时&#xff1b;

File类对文件的操作应用

1.在不存在的文件夹下创建文件 //在当前模块下aaa文件下ddd下eee中创建一个e.txt文件 public class Demo2 {public static void main(String[] args) throws IOException {File file new File("day11_myFile\\aaa\\ddd\\eee");//createNewFile()建立文件需要文件夹…

一张图告诉你什么是系统架构师

转载自 一张图告诉你什么是系统架构师这张图从架构师的综合能力、岗位认识、岗位职责等方面&#xff0c;清楚的画出了作为一个架构的基本准则。人人都想成为架构师&#xff0c;可作为架构你达到了上面的要求了吗&#xff1f; 系统架构师是个神奇的岗位。为什么这么说&#xff0…

机器学习和统计里面的auc怎么理解?

转自&#xff1a; https://www.zhihu.com/question/39840928 作者&#xff1a;小小丘 &#xff08;该作者对 auc的意义 讲得非常棒, 感谢付出&#xff09; 链接&#xff1a;https://www.zhihu.com/question/39840928/answer/84906286 来源&#xff1a;知乎 著作权归作者所有。…

IO流总述

IO流分类 1)按照流向分类&#xff1a; 输入流&#xff1a;读取数据用的 输出流&#xff1a;写数据用的 2)按照读写的数据分类(体系结构) <1>字节流[读写任何类型的文件(任何文件底层都是字节数据)] 字节输入流&#xff1a;IntputStream(抽象类) –FileInuptStream: 读取…

分布式ID生成器的解决方案总结

转载自 分布式ID生成器的解决方案总结在互联网的业务系统中&#xff0c;涉及到各种各样的ID&#xff0c;如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢&#xff1f;特别是在复杂的分布式系统业务场景中&#xff0c;我们应该采用哪种适合自己的解决方案…

IO流相关应用

1.1.字节流复制文件 //运用字节输入输出流将a.txt文件复制到b.txt中 public class Demo1 {public static void main(String[] args) throws IOException {//创建输入流对象FileInputStream fis new FileInputStream("day11_myIO\\a.txt");//可以使用BufferedInputS…

回归模型和分类模型的区别

转自&#xff1a; https://www.zhihu.com/question/21329754 分类和回归的区别在于输出变量的类型。 定量输出称为回归&#xff0c;或者说是连续变量预测&#xff1b; 定性输出称为分类&#xff0c;或者说是离散变量预测。 举个例子&#xff1a; 预测明天的气温是多少度&…

java计算混淆矩阵(分类指标:查准率P,查全率R,P和R的调和均值F1,正确率A)

【0】README 本文使用 java 计算混淆矩阵&#xff0c;并利用 混淆矩阵值计算 分类指标&#xff1b;通用分类指标有&#xff1a; 查准率&#xff0c;查全率&#xff0c;查准率和查全率的调和均值F1值&#xff0c;正确率&#xff0c; AOC&#xff0c; AUC等&#xff1b;本文计算…

什么是CPU密集型、IO密集型?

转载自 什么是CPU密集型、IO密集型&#xff1f;CPU密集型&#xff08;CPU-bound&#xff09; CPU密集型也叫计算密集型&#xff0c;指的是系统的硬盘、内存性能相对CPU要好很多&#xff0c;此时&#xff0c;系统运作大部分的状况是CPU Loading 100%&#xff0c;CPU要读/写I/O(硬…

Properties类与IO流

1.概念 Properties是Map的子类&#xff0c;是一个双列集合&#xff0c;键和值都是字符串类型。Map集合的方法它都能使用&#xff1b; 但是推荐是Properties自己特有的方法&#xff0c;对集合进行操作。 2.特有方法 //properties属于Map集合【该集合一般添加字符串键值对】 /…

什么是无监督学习(监督学习,半监督学习,无监督聚类)?

作者&#xff1a;王丰 链接&#xff1a;https://www.zhihu.com/question/23194489/answer/25028661 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 这个问题可以回答得很简单&#xff1a;是否有监督&#xff08;sup…