Java--集合知识再补充(Map集合)

2023-11-18

下面就是我整理的部分学习笔记,学无止境,加油。

 

为方便对多个对象的操作,就对对象进行存储,集合就是存储对对象最常用的一种方式。

数组长度是固定的,且可以存储基本数据类型;集合可变,集合只能存储对象。

Collection 下有两个子接口,为List和Set。

Map概述

Map<K,V>,该集合存储键值对,而且要保证键的唯一性。

  方法概述:
1.添加
    put(K key, V value) //将指定的值与此映射中的指定键关联(可选操作)。
    putAll(Map<? extends K,? extends V> m) //从指定映射中将所有映射关系复制到此映射中(可选操作)。
    put()返回键原来的值!!!!相同的键时,后添加的值会覆盖原有键对应值。
2.删除
   clear()
   remove(Object key) //如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。返回值。
3.判断
   containsKey()
4.获取
   get(Object key) //返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
   values() //返回此映射中包含的“值”的 Collection 视图。返回 Collection<V>,<>内写值具体类型。 如:Collection<String>  coll = map.values();

Map子类对象特点
Map
  |--HashTable:底层是哈希表数据结构,不可以存入null值和null值,该集合线程是同步的。
  |--HashMap:底层是哈希表数据结构,允许使用null值和null值,该集合是不同步的,将hashtable替代,效率高
  |--TreeMap:底层是二叉树数据结构。线程不同步,可以用于给map集合中的键进行排序。
map和set很像,其实Set底层是是使用了Map集合。

map集合的两种取出方式:
1.KeySet:

将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。

 

部分代码示例:
Map<String,string> map = new HashMap<String,string>();
map.put("123","haha");


//先获取Map集合的所有键的Set集合keySet()
Set<String> keyset = map.keySet();
//有了Set集合,就可以获取迭代器
Iterator it = keyset.iterator();

//Iterator<String> it = map.keyset().iterator();
while(it.hasNext())
{
 String key = it.next();
 //根据获取的键通过map的get方法得到值
 String value = map.get(value);
 syso("key:"key+"value;"value);
}

 


2.entryset
Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。

 

部分代码示例:

/先获取Map集合的所有键的Set集合entryset()
Set<Map.Entry<K,V>> entryset = map.entryset();
Iterator<Map.Entry<K,V>> it = entryset.itertor();
while(it.hasNext())
{
 Map.Entry<String,String> me= it.next();
 String key = me.getKey();
 String value = me.value();
 syso(key+":"+value);
}

Map.Entry,其实entry也是一个接口,它是Map接口中的一个内部类。


map扩展知识
map集合被使用是因为具备映射关系。


集合的循环嵌套用法举例:
class mapDemo{
 

       public static void main(String args[]){
       HashMap<String,HashMap<String,String>> school = new HashMap<String,HashMap<String,String>> ();
       HashMap<String,String> class1 = new HashMap<String,String> ();
       HashMap<String,String> class2 = new HashMap<String,String> ();
       school.put("class1",class1);
       school.put("class2",class2);
      
       class1.put("01","zhangtongxue");
       class1.put("02","litongxue");
      
       class2.put("01","wangtongxue");
       class2.put("02","liutongxue");
      
       Iterator<String> it = school.keySet().iterator();
       while(it.hasNext())
       {
         String className = it.next();
         HashMap<String,String> eachClass = school.get(className);
         System.out.println("eachClass");
         getStudentInfo(eachClass);
       }
  }
   public static void getStudentInfo(HashMap<String,String> hm)
   {
     Iterator<String> it = hm.keySet().iterator();
     while(it.hasNext())
       {
         String id = it.next();
         //HashMap<String,String> StudentName = hm.get(id);
         String StudentName = hm.get(id);
         System.out.println("学号:"+id+"姓名:"+StudentName);
        
       }
   }
}


集合框架的工具类
Collections

方法:
Collections.sort()
Collections.max()
Collections.binarySearch()

Arrays
Arrays.asList(数组)
String[] arr = {"abc","hshs",""}
List<String>list = Arrays.asList(arr);
注意:将数组变成集合,不可以使用集合的增删办法。
因为数组的长度固定。


Integer[] nums ={2,4,5};//int[] nums = {2,4,5}
List<Interger> list = Arrays.asList(nums);
如果数组中的元素都是对象,那么变成对象时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将数组作为集合中的元素存在。

 

集合变数组:Collection接口中的toArray方法。
1.指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部就会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会创建了数组,而是使用传递进来的数组。
2.为什么要将集合变成数组?
为了限定对元素的操作,不需要进行增删操作了。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java--集合知识再补充(Map集合) 的相关文章

  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • jar 中的 apklib 有什么优点?

    我正在关注这个问题 https stackoverflow com questions 6059502 whats the difference between apklib and jar files但它并没有完全回答我的问题 jar 中
  • 从手机访问本地主机[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • android 中camera.setParameters 失败

    我已将相机功能包含在我的应用程序中 我还在市场上推出了该应用程序 我从一位用户那里收到一条错误消息 称他在打开相机时遇到错误 我已经在 2 1 的设备上测试了该应用程序 我从用户那里得到的错误是使用 Nexus One 它主要运行 2 2
  • ACCESS_BACKGROUND_LOCATION 不适用于低于 Q (29) 的 Android 版本

    我的应用程序面向 Android API 28 根据文档 https developer android com preview privacy location target android 10 我应该要求ACCESS BACKGROU
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • android:layout_alignParentBottom 在没有显式布局高度作为 ListView 中的行的情况下使用时会被忽略

    当我使用RelativeLayout与任一fill parent or wrap content作为高度和一个指定的元素 android layout alignParentBottom true 它被忽略并在顶部对齐 设置高度Relati
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox

随机推荐

  • 查看Windows以及linux操作系统的CPU核数、位数、内存大小

    win7系统开始 就分为64位和32位 什么位的操作系统一般是由用户的硬件配置决定 32位系统最大只能支持3 5GB内存 如果在32位系统中使用的是4GB或者更大容量内存 电脑只可以识别到3 4GB可用 而64位系统最大可以支持128GB大
  • 校园无线网络服务器,某校园无线网络覆盖设计方案.doc

    PAGE PAGE 43 无线局域网 技术建议书 2009年9月 目 录 TOC o 1 3 h z u HYPERLINK l Toc240424971 1概述 PAGEREF Toc240424971 h 3 HYPERLINK l T
  • 在jupyter中操作matplotlib的相关操作(一)

    一 什么是GUI 图形用户界面 Graphical User Interface 简称 GUI 又称图形用户接口 是指采用图形方式显示的计算机操作用户界面 二 今天学习了matplotlib工具的绘图功能 具体包括 导入matplotlib
  • 目标服务器无响应,Android:org.apache.http.NoHttpResponseException:目标服务器无法响应...

    我的Android应用使用HttpClient HttpGet来访问REST API 我也设定了 httpGet addHeader Authorization Basic basicAuth 将Base64编码的 用户名 密码 发送到服务
  • 推荐系统(四)——因果效应uplift model系列模型S-Learner,T-Learner,X-Learner

    在之前的文章中我们介绍了使用因果推断中的去除混杂和反事实的相关理论来纠正推荐系统中的偏差问题 在这篇文章中主要和大家分享uplift model相关知识和方法 例子 小夏的商铺在上次请了明星代言后 销量有所上升 但是他不清楚是不是每个人都对
  • uView实现全屏选项卡

    直接复制粘贴即可使用
  • spring boot + aop 自定义日志--收集操作日志

    背景 spring boot aop 自定义注解收集controller层日志 自定义注解 1 1 自定义注解 pom xml
  • 互联网公司级别的简单划分(小白总结)

    1 小公司10 20人 2 稍大的公司 外包公司 3 普通上市公司 有限责任公司 股份制公司 4 知名互联网独角兽 5 央企 工作稳定 6 国企 一线国企 全员分红 年终奖 非一线国企 比一线稍差 7 BAT 美团 字节跳动 京东 注意 x
  • Go(九)指针

    目录 Go语言中的指针 1 1 指针地址和指针类型 1 2 指针取值 1 3 new和make 1 3 1 new 1 3 2 make 1 3 3 new与make的区别 区别于C C 中的指针 Go语言中的指针不能进行偏移和运算 是安全
  • msys64安装使用

    msys64安装使用 下载工具 安装 修改软件下载源 添加工具 查找软件名并安装 更新数据库 测试 之前安装的msys64由于某些原因出现密钥无法更新等问题 各种方法都试了还是处理不了 算了浪费时间耽误事直接卸载掉了 重新安装 最近看到有解
  • python初学者学习第1天

    python环境安装 要想学习 门新的编程语 少不了安装各种各样的软件和配置各种各样的环境 为此 给学习python的同学准备了 份环境安装指南 一 python安装包下载 需要从python官网 https www python org
  • 认识MSCI ESG评级

    认识MSCI ESG评级 成为ESG领导者 ESG特辑 商道纵横 ESG 环境 社会和公司治理 简称ESG 投资理念逐渐成为国际资本市场中的主流投资策略 对于投资者而言 要充分掌握企业的ESG表现 评估企业的环境社会贡献 需要具有公允力的E
  • RabbitMQ 登录控制台出现 “你与此网站的连接不是私密连接“

    解决方案 可能是创建容器时 密码没能成功设置进去 重新设置密码 先进入MQ容器中 我这里是用的docker 容器 docker exec it mq容器名 bash 查看用户 rabbitmqctl list users 修改密码 rabb
  • Python内置数据类型之List篇

    List的定义 li one two three four List是一个有序的集合 这点不同于Dictionary Dictionary是无序的 1 索引和切片 索引有正负之分 正索引下标从0开始 负索引下标从 1开始 比如 gt gt
  • 区块链和传统数据库有什么区别?

    都说区块链就是一种数据库 那区块链和传统数据库到底有什么区别呢 传统数据库拥有与其记录相关的授的客户机可以更改放在统一服务器上的部分 通过演进 ace副本 无论客户端在什么时候使用他们的PC访问数据库 他们都将获得数据库部分的更新适应 对数
  • python二维数组列表输出格式化:对齐数据(实例)

    学习python过程中遇到的问题 在这里记录一下 下面是二维列表 数组 格式化输出的实例 注意 t 有加后会自动对齐 a 学生学号 高等数学 高等物理 高等化学 程序语言 英文六级 个人平均成绩 201 t65 t58 t75 t80 t8
  • python保留小数位的三种方法

    python保留小数位的三种方法 保留小数位是我们经常会碰到的问题 尤其是刷题过程中 那么在python中保留小数位的方法也非常多 但是笔者的原则就是什么简单用什么 因此这里介绍几种比较简单实用的保留小数位的方法 方法一 format函数
  • PhpStorm64修改内存后不能启动

    审查phpstorm bat 这个bat文件应该是监控程序运行 并输出错误日志用的 在末尾加上pause查看完整的运行周期 JAVA EXE ALL JVM ARGS cp CLASS PATH com intellij idea Main
  • javac 命令 javac 命令大全详解---推荐看

    javac 命令 javac 命令大全详解 温柔一刀的技术博客 51CTO博客 1 javac 命令 用法 javac
  • Java--集合知识再补充(Map集合)

    下面就是我整理的部分学习笔记 学无止境 加油 为方便对多个对象的操作 就对对象进行存储 集合就是存储对对象最常用的一种方式 数组长度是固定的 且可以存储基本数据类型 集合可变 集合只能存储对象 Collection 下有两个子接口 为Lis