Java——Map和Set的使用

目录

引言 

Map的使用方法

Set说明

用map统计数组中每个数字出现的次数

将数据去重

找出第一个重复出现的数字

宝石与石头

复制带随机指针的链表

只出现一次的数字


引言 

Map和Set是适合动态查找的集合容器,Map中存储的就是key-value的键值对,Set中只存储了Key

Map的使用方法

K getKey () 返回 entry 中的 key
V getValue () 返回 entry 中的 value
V setValue(V value) 将键值对中的value 替换为指定 value

V get (Object key) 返回 key 对应的 value
V getOrDefault (Object key, V defaultValue) 返回 key 对应的 value key 不存在,返回默认值
V put (K key, V value) 设置 key 对应的 value
V remove (Object key) 删除 key 对应的映射关系
Set<K> keySet () 返回所有 key 的不重复集合
Collection<V> values () 返回所有 value 的可重复集合
Set<Map.Entry<K, V>> entrySet () 返回所有的 key-value 映射关系
boolean containsKey (Object key) 判断是否包含 ke

Set说明

SetMap主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key,Set是集合,存储的元素是不重复的。

boolean add (E e)
添加元素,但重复元素不会被添加成功
void clear ()
清空集合
boolean contains (Object o)
判断 o 是否在集合中
Iterator<E> iterator ()
返回迭代器
boolean remove (Object o)
删除集合中的 o
int size()
返回 set 中元素的个数
boolean isEmpty()
检测 set 是否为空,空返回 true ,否则返回 false
Object[] toArray()
set 中的元素转换为数组返回
boolean containsAll(Collection<?> c)
集合 c 中的元素是否在 set 中全部存在,是返回 true ,否则返回 false
boolean addAll(Collection<? extends E> c)
将集合 c 中的元素添加到 set 中,可以达到去重的效果

用map统计数组中每个数字出现的次数

   public static Map<Integer,Integer> func1(int[] array){
        Map<Integer,Integer> map=new HashMap<>();
        //判断array中的元素是否在map中,如果不在就是1
        //在就在原来的基础上加1;
        for(int x:array){
            if(map.get(x)==null){
                map.put(x,1);
            }else{
                int val=map.get(x);
                map.put(x,val+1);
            }
        }
        return map;
    }

将数据去重

就直接把数据放在集合中

   public static Set<Integer> func2(int[] array){
        HashSet<Integer> set=new HashSet<>();
        for(int x:array){
            set.add(x);
        }
        return set;
    }

找出第一个重复出现的数字

  //从10万个数据中找到第一个重复的数据
    //每次把元素放在set里,放之前都检查一下,set中是不是已经有了
    public static int  func3(int[] array){
        HashSet<Integer> set=new HashSet<>();
        for(int x:array){
            if(set.contains(x)){
                return x;
            }
            set.add(x);
        }
        return -1;

    }

宝石与石头

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。

示例 1:

输入:jewels = "aA", stones = "aAAbbbb"
输出:3

class Solution {
    public int numJewelsInStones(String jewels, String stones) {
        //只要把宝石放在集合中就可以了;
        HashSet<Character> set=new HashSet<>();
        for(Character ch:jewels.toCharArray()){
            set.add(ch);
        }
        int count=0;
        for(Character ch:stones.toCharArray()){
            if(set.contains(ch)){
                count++;
            }
        }
        return count;
    }
}

复制带随机指针的链表

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。

例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

返回复制链表的头节点。

用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:

val:一个表示 Node.val 的整数。
random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。
你的代码 只 接受原链表的头节点 head 作为传入参数。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/copy-list-with-random-pointer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

//map通过key可以找到value;

//key中存储旧节点

//value中存储新节点

//步骤:

//第一次遍历链表,存储老节点与新结点之间的映射关系;

//第二次修改链表,修改新的next和random

//return map.get(head);

/*
// Definition for a Node.
class Node {
    int val;
    Node next;
    Node random;

    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
*/


//map.get(cur).next=map.get(cur.next);
//map.get(cur).random=map.get(cur.random);
class Solution {
    public Node copyRandomList(Node head) {
        HashMap<Node,Node> map=new HashMap<>();
        Node cur=head;
        while(cur!=null){
            Node node=new Node(cur.val);
            map.put(cur,node);
            cur=cur.next;
        }
        cur=head;
        while(cur!=null){
            map.get(cur).next=map.get(cur.next);
            map.get(cur).random=map.get(cur.random);
            cur=cur.next;
        }
        return map.get(head);      

    }
 
}

只出现一次的数字

        //如果集合中没有这个元素,就把这个元素放入集合中,如果有这个元素,就把这个元素从集合中删除,最终剩下的元素就是要找的元素

class Solution {
    public int singleNumber(int[] nums) {

       HashSet<Integer> set=new HashSet<>();
       for(int x:nums){
           if(!set.contains(x)){
               set.add(x);
           }else{
               set.remove(x);
           }
       }
       //return set.;
    //   
    for(int i=0;i<nums.length;i++){
        if(set.contains(nums[i])){
            return nums[i];
        }
    }
    return -1;

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA常用插件列表

一 背景 IDEA常用插件列表&#xff0c;用来提供工作效率。你都安装了吗 IntelliJ IDEA 默认安装并提供了非常多的工具&#xff0c;比如 Maven Integration、Markdown support、SSH Remote Run 等。其中有很多好用&#xff0c;但是不为人知的工具。 二 插件列表 阿里代码规约…

有什么比较好的bug管理工具?5款热门工具推荐

工具再优秀&#xff0c;适合自己才最重要。 为尽量讲透这个问题&#xff0c;本文的行文结构我先整理如下&#xff1a; 1、为什么需要bug管理工具&#xff1f; 2、好的bug管理工具的标准是什么&#xff1f; 3、好的bug管理工具推荐&#xff08;5款&#xff09; 4、如何挑选适合…

cmd命令教程

小提示&#xff1a; 在本文中&#xff0c;我将向您展示可以在 Windows 命令行上使用的 40 个命令 温馨提示&#xff1a;在本教程中学习使用适用于 Windows 10 和 CMD 网络命令的最常见基本 CMD 命令及其语法和示例 文章目录为什么命令提示符有用一、cmd是什么&#xff1f;如何在…

Java Web 实战 13 - 多线程进阶之 synchronized 原理以及 JUC 问题

文章目录一 . synchronized 原理1.1 synchronized 使用的锁策略1.2 synchronized 是怎样自适应的? (锁膨胀 / 升级 的过程)1.3 synchronized 其他的优化操作锁消除锁粗化1.4 常见面试题二 . JUC (java.util.concurrent)2.1 Callable 接口2.2 ReentrantLock2.3 原子类2.4 线程池…

[蓝桥杯单片机]——八到十一届初赛决赛客观题

第八届初赛 一、填空题 采用外部12MHz晶振&#xff0c;经过系统12分频时定时器获得最大定时长度&#xff0c;此时定时器定时脉冲为1MHz&#xff0c;周期为1s&#xff0c;而定时器计时均为16位加法计数器&#xff0c;即计时长度为。 二、 选择题 ①带阻滤波器是指能通过大多数频…

九种跨域方式实现原理(完整版)

前言 前后端数据交互经常会碰到请求跨域&#xff0c;什么是跨域&#xff0c;以及有哪几种跨域方式&#xff0c;这是本文要探讨的内容。 一、什么是跨域&#xff1f; 1.什么是同源策略及其限制内容&#xff1f; 同源策略是一种约定&#xff0c;它是浏览器最核心也最基本的安…

【JavaSE】类和对象(上)

类和对象&#xff08;上&#xff09;类和对象1. 面向对象的初步认知1.1 什么是面向对象1.2 面向对象与面向过程2. 类定义和使用2.1 简单认识类2.2 类的定义格式2.3 课堂练习3. 类的实例化3.1 什么是实例化3.2 类和对象的说明类和对象 类和对象需要慢慢的逐步的才能理解&#x…

【Linux】项目自动化构建工具——make/Makefile

目录 1.make与Makefile的关系 Makefile make 项目清理 clean .PHONY 当我们编写一个较大的软件项目时&#xff0c;通常需要将多个源文件编译成可执行程序或库文件。为了简化这个过程&#xff0c;我们可以使用 make 工具和 Makefile 文件。Makefile 文件可以帮助我们自动…

虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff!

虹科干货&#xff5c;Redis企业版数据库为企业「数据安全」叠加最强Buff&#xff01; “这是一场可预见的噩梦&#xff01;” 近期&#xff0c;黑客通过攻击亚洲最大两家数据中心—万国数据和新科电信媒体&#xff0c;获取国际巨头企业的登录凭证&#xff0c;引发了2000多家企…

JS高级知识总结

文章目录1. this指向问题2. 对象进阶2.1 对象的定义和使用2.2 对象访问器2.2.1 Getter2.2.2 Setter2.3 对象构造器2.4 对象原型2.4.1 prototype属性2.4.2 \_\_proto\_\_ 属性2.4.3 constructor属性2.4.4 原型链2.5 Object对象2.5.1 管理对象2.5.2 保护对象3. 函数进阶3.1 函数的…

jQuery《一篇搞定》

今日内容 一、JQuery 零、 复习昨日 1 写出至少15个标签 2 写出至少7个css属性font-size,color,font-familytext-algin,background-color,background-image,background-sizewidth,heighttop,bottom ,left ,rightpositionfloatbordermarginpadding 3 写出input标签的type的不…

WiFi6模块如何应用在智能家居

WiFi 6技术可以应用于智能家居&#xff0c;提供更高的速度、更可靠的连接和更好的安全性。以下是一些WiFi 6模块在智能家居中的应用&#xff1a;更快的速度&#xff1a; WiFi 6比先前的WiFi标准更快&#xff0c;这意味着您可以更快地传输数据和流媒体内容。这对于智能家居设备尤…

MySQL 函数介绍

MySQL 函数介绍 MySQL中的函数主要分为以下四类&#xff1a; 字符串函数、数值函数、日期函数、流程函数&#xff1b; 目录 MySQL 函数介绍 MySQL 字符串函数 MySQL 数值函数 MySQL 日期函数 MySQL 流程函数 MySQL 字符串函数 MySQL中内置了很多字符串函数&#xff0c;常…

【JavaScript速成之路】JavaScript内置对象--数组对象

&#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f525;系列专栏&#xff1a;【JavaScript速成之路】 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录前言数组对象1&#xff0c;数组类型检测2&#xff0c;数组元素增删3&#xff0c;…

力扣-按日期分组销售产品

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1484. 按日期分组销售产品二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.其他总结前言 一、题目&#…

字符编码(ASCII码、音码、形码、区位码,国标码、机内码,字形码)

1、西文字符编码 ASCII&#xff08;美国信息交换标准代码&#xff09;字符编码&#xff0c;该编码标准已经被国际标准化组织&#xff08;ISO&#xff09;指定为国际标准&#xff0c;是国际上使用最广泛的一种字符编码。标准的ASCII码采用二进制编码&#xff0c;他可以表示27即1…

MySQL对表操作

目录 CRUD 增加(Create) 查询&#xff08;Retrieve&#xff09; 全列查询 指定列查询 查询字段为表达式 别名 去重&#xff1a;DISTINCT 排序&#xff1a;ORDER BY 条件查询&#xff1a;WHERE 逻辑运算符&#xff1a; 修改&#xff08;Update&#xff09; 删除&…

数据结构与算法这么难,为什么我们还要学习?

文章目录前言1. 数据结构与算法是什么&#xff1f;2. 为什么数据结构与算法很难&#xff1f;3. 如何系统学习数据结构与算法&#xff1f;&#x1f351; 复杂度&#x1f351; 线性表&#x1f351; 树形结构&#x1f351; 图&#x1f351; 排序&#x1f351; 字符串&#x1f351;…

快排函数 -- qsort函数(Quick Sort)

文章目录&#x1f50e;1.qsort函数简介&#x1f4a1;1.1.函数原型&#x1f4a1;1.2.参数含义&#x1f50e;2.比较函数介绍&#x1f50e;3.比较函数使用案例&#x1f4a1;3.1.整型数组&#x1f4a1;3.2.浮点型数组&#x1f4a1;3.3.结构体类型 - 字符串&#x1f50e;4.利用冒泡排…

docker 形态构建redis 哨兵模式集群

主从模式介绍 哨兵是 Redis 的一种运行模式&#xff0c;它专注于对 Redis 实例&#xff08;主节点、从节点&#xff09;运行状态的监控&#xff0c;并能够在主节点发生故障时通过一系列的机制实现选主及主从切换&#xff0c;实现故障转移&#xff0c;确保整个 Redis 系统的可用…
最新文章