Java 常用Set集合和常用Map集合

java之集合(详细-Map,Set,List) TreeSet集合存储自定义类型的对象时,必须指定排序规则,支持如下两种方式来指定比较规则。方式一让自定义的类(如学生类)实现Comparable接口,重写里面的compareTo方法来指定比较规则。方式二通过调用TreeSet集合有参数构造器,可以设置Comparator对象(比较器对象,用于指定比较规则。根据方式一解决对象排序根据方式二解决对象排序注意:如果既用了方式一又用了方式二进行自定义排序,那么TreeSet就近选择自己自带的比较器对象进行排序; 阅读详情

常用Set集合

Set集合的特点

Set接口下的集合都会有以下特点

  • 不能存储重复元素

  • 没有索引

HashSet

HashSet集合的特点

  • 底层数据结构是哈希表

  • 存储元素的顺序和遍历获取出来的顺序可能不一致

  • 没有索引

  • 集合中不能存储重复元素

创建对象

HashSet<元素数据类型> set = new HashSet<>();
public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();
}

常用方法

方法解释
boolean add(E e)添加元素,如果元素添加不成功    返回值代表是否添加成功
boolean remove(Object o)删除元素 ,返回值代表删除元素是否成功
boolean contains(Object o)判断元素是否存在
int size()获取集合的大小
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        boolean f = set.add("愚");
        set.add("生");
        set.add("浅");
        set.add("末");
        System.out.println(f);
    }

我们打断点调试一下:

可以看到愚生浅末四个字符已经装入set,且f为true证明添加成功。

我们再试试删除:

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        set.add("愚");
        set.add("生");
        set.add("浅");
        set.add("末");
        boolean f = set.remove("生");
    }

 可以看到set已经没有生了,且f为true代表删除成功。

判断是否存在:

    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        set.add("愚");
        set.add("生");
        set.add("浅");
        set.add("末");
        boolean f = set.contains("末");
    }

末是存在于set的,所以返回值为true。
获取集合的大小:

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        set.add("愚");
        set.add("生");
        set.add("浅");
        set.add("末");
         //获取集合的大小
        int size = set.size();

添加了愚生浅末四个字符,所以可以得到size是4.

遍历

1.转换为数组遍历

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("愚");
        set.add("生");
        set.add("浅");
        set.add("末");
        String[] strings = set.toArray(new String[0]);
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }

结果:

前面说过:存储元素的顺序和遍历获取出来的顺序可能不一致。

2.使用迭代器遍历

    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("愚");
        set.add("生");
        set.add("浅");
        set.add("末");
        Iterator<String> it = set.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
    }

结果:

3.foreach遍历

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("愚");
        set.add("生");
        set.add("浅");
        set.add("末");
        for (String s : set) {
            System.out.println(s);
        }
    }

结果:

常用Map集合

Map集合的概述

Map接口是双列集合的顶层接口,下面是Map接口的定义

interface Map<K,V>  K:键的类型;V:值的类型

存储的数据必须包含key和value。

key和value在Map集合中是一一对应的关系。一个key对应一个value。

key在map集合中是不会重复的。

HashMap

HashMap集合的特点

  • 底层数据结构是哈希表

  • 存储元素的顺序和遍历获取出来的顺序可能不一致

  • key不会重复

创建对象

HashMap<key的数据类型,value的数据类型> map = new HashMap<>();

例如:

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        HashMap<String,Integer> map = new HashMap<>();
    }

常用方法

方法解释
V put(K key, V value)添加元素,如果key不存在就添加,如果key
V get(Object key)根据key获取对应的value值返回。如果key不存在就返回null
V remove(Object key)根据key删除map中对应的键值对。并且把删除的value返回
boolean containsKey(Object key)判断key是否存在
int size()集合中键值对的对数
void clear()清空集合中的所有键值对
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
//        map.put()
        //添加元素
        map.put("name", "愷龍");
        map.put("age", "20");
        String v = map.put("name", "愚生浅末");//将原来的愷龍替换为愚生浅末
        String name = map.get("name");//获取名字:愷龍
        String age = map.get("age");//获取age:20
        //删除元素
        String delV = map.remove("age");//返回值为20
        //判断key是否存在
        if(map.containsKey("name")){
            String agea = map.get("name");//null
            System.out.println(agea.length());
        }
        //size
        int size = map.size();
        map.clear();
    }

遍历

1.使用entrySet遍历

map集合的entrySet方法可以获取一个Set集合,集合中存放的是Entry对象,一个Entry对象相当于一个键值对。我们可以遍历set集合拿到Entry对象,然后获取出里面的键和值。

「使用迭代器遍历entrySet」

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","愷龍");
        map.put("age","20");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //使用迭代器遍历entrySet
        Iterator<Map.Entry<String, String>> it = entries.iterator();
        while (it.hasNext()){
            Map.Entry<String, String> entry = it.next();
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
    }

结果:

「使用foreach遍历entrySet」

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","愷龍");
        map.put("age","20");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //使用foreach遍历entrySet
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
    }

结果:

2.使用keySet遍历

map集合的keySet方法可以获取一个Set集合,集合中存放的是所有的key。我们可以遍历set集合拿到key对象,然后通过key获取对应的value。

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","愷龍");
        map.put("age","20");
        Set<String> keys = map.keySet();
        for (String key : keys) {
            System.out.println(key+"="+map.get(key));
        }
    }

结果:

HashMap的key去重原理

HashMap在添加元素的时候会判断集合中是否有key和本次存入的key相同。判断的时候主要是通过hashCode方法和equals方法来进行判断的。hashCode相同,并且equals判断也相同就会认为是同一个key。

所以如果我们要存储到HashMap中的key是一个自定义的类型。就需要根据情况判断下是否需要重写下hashCode方法和equals方法。重写的时候使用IDEA的提示即可。

public class Student {
    private int age;
    private String name;
    public String getName(){
        return name = this.name;
    }
    public void setName(String name){
        this.name = name;
    }
    public int getAge(){
        return age = this.age;
    }
    public void setAge(int age){
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
}

「注意:HashSet存储数据其实也是使用了HashMap。所以如果往HashSet中存储自定义对象也要看情况是否需要重写hashCode方法和equals方法。

echarts的坐标轴处理算法 参考原文:https://www.cnblogs.com/vicky-li/p/11653415.html。2、可用于双轴的情况,指定splitNumber,保证左右两边的线没有交叉显示的情况。1、设置echarts显示的最大最小值,让数据显示比较有起伏。处理echarts的一些问题。 阅读详情

相关推荐

AWSIM模拟器 新增多相机

本文介绍了基于Unity6引擎对AWSIM自动驾驶模拟器的优化方案,主要针对多相机系统的扩展实现。作者通过修改EgoVehicle.cs和AutowareSimulationDemo.cs核心代码,将原单相机系统升级为5相机配置。关键技术点包括:1)使用List容器管理多个CameraSensor组件;2)完善相机初始化流程;3)配置5个相机UI显示窗口;4)修改ROS话题设置。优化后的系统可支持BEVFusion等多传感器融合算法的测试验证,为Autoware.universe 0.45.0及以上版本提供

W805698955的博客 831

13_Set集合

Set集合 属于Collection的子类接口 Set集合存储数据的特点:无序,不可重复。 1.为什么重写了equals必须重写hashcode方法? Set集合再判断2个对象是否相等的时候? <1>.先检查hashcode值是否相等(默认情况下一个唯一的值,内存地址就是由hashcode的16进制组成) 不相等,那么说明2个对象不相等。(不会去判断equals方法了) 如果相等才回去判断equals是否相等 <2>如果equals相等则2个对

jwsl999的博客 284

《软件工程——实践者的研究方法》重难点复习笔记(第八章——理解需求)

8项需求工程任务 inception 开始 8.1.1 identify stakeholders 定义:从软件开发中收益 例如:市场人员、销售经理、顾客、顾问、维护团队等(P139) 8.1.2 这个阶段的问题是context-free的。有三套(P140) 8.1.3 提到NFR(nonfunctional requirement)和QFD(quality

whooiif的博客 1815

Java集合之Set(超详细)

保证元素唯一性需要让元素重写两个方法:一个是 hashCode(),另一个是 equals()。HashSet在存储元素的过程中首先会去调用元素的hashCode()值,看其哈希值与已经存入HashSet的元素的哈希值是否相同,如果不同 :就直接添加到集合;如果相同 :则继续调用元素的equals() 和哈希值相同的这些元素依次去比较。如果说有返回true的,那就重复不添加;如果说比较结果都说false,那就是不重复就添加。为了减少equals的比较次数提高效率一般情况让属性不同的对象尽量hashCode(

m0_69383623的博客 1712

Claude AI实战指南:从注册到精通,突破手机验证的终极解决方案

本文提供了一份详尽的Claude AI实战指南,重点解决了国内用户注册过程中的手机号验证难题,并分享了使用技巧。文章详细介绍了如何通过虚拟手机号服务等方案完成注册,并深入解析了Opus、Sonnet、Haiku三大模型的特点与选择策略,帮助用户从注册到精通,高效利用这一安全、健谈的AI助手进行内容创作、编程开发与学习研究。

weixin_29092031的博客 1233

量子密钥分发系统的工程实践(四):FPGA在后处理中的核心实现与优化

本文深入探讨了FPGA在量子密钥分发(QKD)系统后处理中的核心实现与优化策略。文章详细拆解了FPGA如何高效完成原始密钥提取、误码协商和私密放大等关键任务,并分享了流水线设计、资源复用及存储器架构优化等工程实践“心法”,旨在解决高速、实时QKD系统中的性能瓶颈,提升密钥生成率。

t8u9v0的博客 388

Java常用集合之Set

Java常用集合之Set

m0_62609939的博客 4788

图解B树的原理及操作

本文主要参考:https://blog.youkuaiyun.com/shenchaohao12321/article/details/83243314 1. B树 1.1 B树的定义 B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。 一颗m阶的B树定义如下: 1)每个结点最多有m-1个关键字。 2)根结点最少可以只有1个关键字。 3)非根结点至少有Math.ceil(m/2)-

jinking01的专栏 3万+

JAVA常用集合set

Java集合框架中的Set接口是Collection接口的一个子接口,它表示一个无序且不包含重复元素的集合。Set接口的主要目的是确保集合中的元素唯一性,即集合中不允许出现重复的元素。它继承自CollectionHashSet和TreeSet。

qq_62791685的博客 2907

强化学习 | Multi Agents | Trust Region | HATRPO | HAPPO

ICLR2022多智能体论文,将trust region推广到MA上,保证单调递增。学习博客,共7k字,纯手敲。含大量手写笔记。

111辄的博客 1万+

ICM20948 DMP代码详解(54)

ICM20948 DMP代码详解(54)

phmatthaus的专栏 424

Java中的集合List、Set和Map三大类以及常用方法

Java中的集合主要分为List、Set和Map三大类,每一类都有多种实现。

一只猫 614

ABAP 平台 SOAUTH2_CLIENT 全面实战:用一套配置,打通 OAuth 2.0 客户端的创建、联调与运维

本文是一份ABAP平台上配置OAuth 2.0客户端的全流程指南,重点介绍新界面SOAUTH2_CLIENT的使用方法。内容涵盖从概念解析到实操步骤,包括四种常见授权方式的选择、证书信任管理、Scope配置以及联调技巧。指南通过两个企业级案例(对接SAP BTP Cloud Integration和SAML 2.0身份联合)展示实际应用场景,并提供了配置清单和伪代码示例。特别强调新界面将客户端配置、令牌测试和校验功能整合的工程化优势,以及与旧事务码OA2C_CONFIG的主要差异。文中多处引用SAP官方文档

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 319

图解java常用的几个集合List,Set和Map

如果有需要修改的地方欢迎私信,我会尽快回复并修改:D 

HelloTenno的博客 488

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java集合之List、set和map的常用方法

ArrayList ArrayList 的常用方法 。 .add(); .remove(); //可以是index和Object类型。Object移除第一次出现的指定元素。 .indexOf(“ab”); .lastIndexOf(“a”); .size(); .get(index); .set(index,obj); //修改集合的数值 .contains(Object o) ...

qq_40531768的博客 1290

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java 常用集合框架List、Set、Map和Queue等体系汇总

一、集合框架二、Collection接口1、List接口(1)ArrayList(2)LinkedList(3)Vector(4)Stack2、Set接口(1)HashSet(2)LinkedHashSet(3)TreeSet(4)List 和 Set 适用场景(5)使用示例3、Queue三、Map接口(1)HashMap 和 Hashtable(2)LinkedHashMap(3)TreeMa...

360°顺滑 1382

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java常用集合list,set和map的区别及适用范围

1.List,Set都是继承Collection接口,而map不是。 2.List特点:元素存储有序,有索引,可重复。 Set特点:元素存储无序,无索引,不可重复 (注意:set集合虽然无放入顺序,但是元素在set中的位置是由Hashcode决定的,加入Set的Object必须定义equals()方法,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代...

apache_ant的博客 406

【笔记】Java的常用工具_集合简介、List集合的特点和应用、增强for的使用、迭代器演示、泛型简介、Collections工具类的使用、Set集合的特点、Map集合的特点和应用

文章目录一、Java常用工具_集合 简介二、List集合的特点和应用三、增强for的使用四、迭代器演示五、泛型简介六、Collections工具类的使用七、Set集合的特点八、Map集合的特点和应用 一、Java常用工具_集合 简介 二、List集合的特点和应用 三、增强for的使用 四、迭代器演示 五、泛型简介 六、Collections工具类的使用 七、Set集合的特点 八、Map集合的特点和应用 ...

qq_51843109的博客 325

JAVA中的Collection,List,Set,Map集合的使用与万字详解

在JAVA.until包中提供了一些集合,其中List集合的List接口和Set接口实现了Collection接口,这些集合被称为容器。集合和数组不同,数组的长度是固定的,集合的长度是可变的;数组只能存放基本数据类型且只能存储一种类型,集合用来存放类对象的引用并且可以存储同一种类型。该框架必须是高性能的。的实现也必须是高效的。该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。对一个集合的扩展和适应必须是简单的。1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;

2302_79993788的博客 1605

java中最常见的集合框架(List,set,map)以及他们的区别

一.为什么要使用集合 在学习集合之前,我们需要思考的是为什么要有集合?集合有什么用? 我们知道,在java中有数组的概念,数组可以用来存放一组数据。但是,数组是固定长度的,这样在使用的时候就会有很多的不方便,比如说资源的浪费。这个时候,我们就希望有一种可以动态改变大小的数组,那就是集合的作用了。Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。java中的集合主要分为Collection和Map两种: 集合

mrhe_的博客 501

【Java 数据结构】Map和Set的介绍

本期主要讲解: 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法 5、 Map 和 Set 的注意点

程序猿教你打篮球的博客 6274

Java[集合] Map 和 Set

哈喽,大家好~ 我是保护小周ღ,本期为大家带来的是 Java Map 和 Set 集合详细介绍了两个集合的概念及其常用方法,感兴趣的朋友可以来学习一下。更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘

保护小周ღ的博客 2245

Java集合框架:List、Set、Map的理解

Java集合框架:List、Set、Map的理解 1、集合与数组的区别 数组:长度固定,存储内容可以是基本数据类型,只能存储同一种类型 集合:长度可变,存储能容必须数引用类型(对象),存储类型可以不同。 2、常用集合的分类 Collection:存储单值的最大操作根接口 List接口:可重复,元素按插入顺序保存 ArrayList:List接口的实现类,数据结构由数组实现,对增删慢,查找快 LinkedList:List接口的实现类,数据结构由链表实现,对增删快,查找慢 Vector:List接口的实

xkq957的博客 265

java day13 Set集合 & Map集合 & Stream流

双列集合Map类集合和Set类集合的底层实现原理相同所以特点相同。

moskidi的博客 2288

浅谈集合List,Set以及Map集合的特点及区别

集合List Set以及Map的区别 要想了解三者的区别,我们想来看看java的集合框架图 接着就需要从它们各自的特点来说 1.List的主要特点及用法 1.1 可以允许存储重复的对象 1.2 可以插入多个null元素 1.3 是一个有序容器,保持了每一个元素的插入顺序,插入的顺序即输出的顺序 1.4 常用的实现类有 ArrayList、LinkedList 和 Vector。A...

qq_42894060的博客 8969
上一篇: 虾皮二面:Spring Bean 默认是单例的,如何保证并发安全?
下一篇: java对象在内存中如何分布 | java上锁原来就是内存占位,so easy
javaYY_
博客等级 码龄4年 148粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值