HsahMap

HashMap 是 Java 中最常用的集合类之一,它实现了 Map 接口,基于哈希表存储键值对

HashMap的存储是无顺序的

HashMap存储的是键值对(key-value)其中键key是唯一的,值(value)可以重复。

HashMap的底层是数组和链表

HashMap的常见方法

添加方法:
1,put(K key, V value):将键值对插入到 HashMap 中。如果添加的是新的内容,返回null。如果键已经存在,则更新对应的值,返回更新前的值
2,putIfAbsent(K key, V value) 如果没有这个key,新增上去。有这个key,就不新增上去 更改方法:
1,replace(K key, V value) 修改数据,将key是张三的,更新为19。如果没有这个key,则不做替换(理解什么也不做) 获取方法:
1,get(Object key):根据键获取对应的值。如果键不存在,返回 null。
2,keySet():返回的类型是Set, 返回的值是HashMap中所有键的集合。
3,values():返回类型是Collection,返回的值是HashMap 中所有值的集合。
4,entrySet():返回 HashMap 中所有键值对的集合。返回的是Set类型。
5,size(): 返回 HashMap 中键值对的数量。返回类型是int 删除方法:
1,remove(Object key):根据键删除对应的键值对。移除不存在的键名,返回的是 null
2,remove(Object key,Object value):删除对应的键名和对应的值。返回的类型是布尔
3,clear():清空 HashMap,移除所有键值对。 检查元素:
1,containsKey(Object key):返回的类型是布尔,判断 HashMap 中是否包含指定的键。
2,containsValue(V value) 检查是否包含某个value值,如果包含返回true,不包含返回false
3,isEmpty(): 检查 HashMap 是否为空。返回的是布尔值。 克隆方法:
1,lone()来复制一个 HashMap 对象,返回值是一个对象,因此需要使用强制转化,是一个浅拷贝。
总结:下次学习某个类型的方法,也像这样归一下类。会好很多。

新增数据 put

package part;
// HashMap在java->util这个包下
import java.util.HashMap;
public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "17");
// 输出 {lisi=17, zhangsan=18}
System.out.println(map);
}
}

put新增内容,返回null, 如果键已经存在,则更新对应的值

package part;
// HashMap在java->util这个包下
import java.util.HashMap;
public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
// 如果添加的是新的内容,返回null。
System.out.println(map.put("lisi", "17"));
// 这次的键名和第一次的键名,重复了,就会出现覆盖哈。因为键名是唯一的。如果键已经存在,返回更新前的值。输出18
System.out.println( map.put("zhangsan", "25"));
// 输出 {lisi=17, zhangsan=25}
System.out.println(map);
}
}

HashMap存储的是键值对,键key是唯一的


package part;
// HashMap在java->util这个包下
import java.util.HashMap;
public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "17");
// 这次的键名和第一次的键名,重复了,就会出现覆盖哈。因为键名是唯一的
map.put("zhangsan", "25");
// 输出 {lisi=17, zhangsan=25}
System.out.println(map);
}
}

putIfAbsent 如果没有这个key,新增上去。 有这个key,就不新增上去

package part;
// HashMap在java->util这个包下
import java.util.HashMap;
public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
// 如果没有这个key,新增上去。 有这个key,就不新增上去
map.putIfAbsent("zhangsan", "19");
System.out.println(map);
}
}

修改数据:替换replace

package part;
// HashMap在java->util这个包下
import java.util.HashMap;
public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
// 将key是张三的,更新为19。如果没有这个key,则不做替换(理解什么也不做)
map.replace("zhangsan", "199");
// 什么也不会做
map.replace("lisi", "19");
System.out.println(map); // {zhangsan=199}
}
}

keySet():返回 HashMap 中所有键的集合。


package part;
// HashMap在java->util这个包下
import java.util.HashMap;
import java.util.Set;
public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// keySet():返回 HashMap 中所有键的集合,返回类型是Set
Set set = map.keySet();
System.out.println(set); // [lisi, zhangsan]
}
}

values():返回 HashMap 中所有值的集合

package part;
// HashMap在java->util这个包下
import java.util.Collection;
import java.util.HashMap;
import java.util.Set; public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// map.values():返回 HashMap 中所有值的集合。类型是: Collection
Collection list = map.values();
System.out.println(list); // [19, 18]
}
}

增强for循环遍历

public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// 获取所有键名的集合
Set set = map.keySet();
for (Object key : set) {
// 输出 19 18
System.out.println(map.get(key));
}
}
}

containsKey(Object key):判断 HashMap 中是否包含指定的键,返回是一个布尔值

package part;
// HashMap在java->util这个包下
import java.util.Collection;
import java.util.HashMap;
import java.util.Set; public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// containsKey(Object key):判断 HashMap 中是否包含指定的键。返回是一个布尔值
Boolean bool = map.containsKey("zhangsan");
System.out.println(bool); // true
}
}

containsValue(V value) 检查是否包含某个value值,如果包含返回true,不包含返回false


package part;
// HashMap在java->util这个包下
import java.util.Collection;
import java.util.HashMap;
import java.util.Set; public class Java01 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// containsValue(V value) 检查是否包含某个value值,如果包含返回true,不包含返回false
System.out.println( map.containsValue("19")); // true
}
}

entrySet():返回 HashMap 中所有键值对的集合。


package part;
// HashMap在java->util这个包下
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class Java01 {
public static void main(String[] args) {
// 键名是字符串,键值也是字符串,我们使用的是泛型进行约束
HashMap<String, String> map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// 下面的 Map.Entry 是一个接口,固定这样写的
Set<Map.Entry<String, String>> keyItem = map.entrySet();
for (Map.Entry<String, String> entry : keyItem) {
// 遍历每一项
// lisi 19
// zhangsan 18
System.out.println(entry);
}
}
}

remove(Object key) 删除

package part;
import java.util.HashMap;
public class Java01 {
public static void main(String[] args) {
// 键名是字符串,键值也是字符串,我们使用的是泛型进行约束
HashMap<String, String> map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// 会把张三这个键名给删除掉。此时map就只有lisi这一项了
map.remove("zhangsan");
// 删除 键名是lisi,它的值是 100的这一项,返回值是一个布尔类型的
Boolean flag= map.remove("lisi","100");
System.out.println(flag); // false
System.out.println(map);
}
}

clone浅拷贝,返回类型是对象,需要强制转换

package part;
import java.util.HashMap;
public class Java01 {
public static void main(String[] args) {
// 键名是字符串,键值也是字符串,我们使用的是泛型进行约束
HashMap<String, String> map = new HashMap();
map.put("zhangsan", "18");
map.put("lisi", "19");
// clone是浅拷贝,并且返回来的是一个对象,因此需要强制转换的哈
HashMap<String,String> newMap= (HashMap<String,String>)map.clone();
// {zhangsan=18, lisi=19}
System.out.println(newMap);
}
}

尾声

准备开始学习java了。

今天学习的第五天,每天都会发文章,我要卷起来。

请小伙伴们监督我,奥利给

java中的HsahMap的更多相关文章

  1. java中的锁

    java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...

  2. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. java中Action层、Service层和Dao层的功能区分

    Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...

  5. Java中常用集合操作

    一.Map 名值对存储的. 常用派生类HashMap类 添加: put(key,value)往集合里添加数据 删除: clear()删除所有 remove(key)清除单个,根据k来找 获取: siz ...

  6. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  7. 关于Java中进程和线程的详解

    一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...

  8. Java中的进程和线程

     Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ...

  9. Java中的进程与线程(总结篇)

    详细文档: Java中的进程与线程.rar 474KB 1/7/2017 6:21:15 PM 概述: 几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进 ...

  10. 初探java中this的用法

    一般this在各类语言中都表示“调用当前函数的对象”,java中也存在这种用法: public class Leaf { int i = 0; Leaf increment(){ i++; retur ...

随机推荐

  1. C# 开发的数据采集及云端监控系统

    前言 推荐C#语言开发的堤坝渗透地质数据采集及云端监控系统.希望本文能够为大家提供有价值的信息和参考. 项目介绍 使用数十个 .NET 客户端控制硬件设备进行工作,采集数据并进行处理. 管理人员通过 ...

  2. python get请求传array数组

    前言 使用传统的http发get请求时,如果传参为array数组,参数名称为a时,可以这样传值a=1&a=2&a=3,但是当只有一个时,这种方式就不合理了. get请求还有另外一种方式 ...

  3. Kafka之使用

    windows下的管理工具: kafka-tool:  https://www.kafkatool.com/download.html [Windows] 常用命令: # 查看topic 列表 ./b ...

  4. PHP编译安装之常见问题

    正式服的PHP环境,一般都会进行编译安装,汇总一下经常遇到的一些问题 1.Call to undefined function crmeb\utils\imagecreate 解决:需要安装gd库 1 ...

  5. ContosoRetailDW数据库恢复问题

    https://www.microsoft.com/en-us/download/details.aspx?id=18279 下载 ContosoBIdemoBAK.exe和ContosoBIdemo ...

  6. 新型大语言模型的预训练与后训练范式,谷歌的Gemma 2语言模型

    前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的.公开权重的大型语言模型.最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内 ...

  7. Fuzz技术综述与文件Fuzz

    文章一开始发表在微信公众号 https://mp.weixin.qq.com/s?__biz=MzUyNzc4Mzk3MQ==&mid=2247486189&idx=1&sn= ...

  8. c++的OJ练习一

    1.1599.米老鼠偷糖果 2.1323.扩建花圃问题 3.P1425.小鱼的游泳时间 4.1598.文具店的折扣 5.P5706.再分肥宅水 6.1345.玫瑰花圃 7.P3954.NOIP2017 ...

  9. 技术漫谈|IVR通用开发框架简说

    IVR为Interactive Voice Response的缩写,意为交互式语音应答(系统).它可以应答客户的呼叫,然后为呼叫者提供语音导航或自助服务,呼叫者可通过按键输入或使用语音命令进行选择.随 ...

  10. 【C#】【平时作业】习题-7-继承、抽象与多态

    相关概念 什么是继承 继承定义了如何根据现有类创先新类的过程 任何类都可以从另外一个类继承 一个派生出来的子类具有这个类的所有公共属性和方法 类的继承机制 创建新类所根据的基础类称为基类或父类,新建的 ...