集是一个集合,它可以快速地查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。这不是一种非常通用的查找方式,因为在集合中查找元素总是要遍历集合。通常,我们知道某些键的信息,并想要查找与之对应的元素。映射(map)数据结构就是为此而设计的。映射用来存放键/值对。如果提供了键,就能够查找到值。它们之间是一一对应关系。

基本映射操作:

Java类库为映射提供了两个通用的实现:HashMap和TreeMap,这两个类都实现了Map接口

散列映射(HashMap)对键进行散列,树映射(TreeMap)用键的整体顺序对元素进行排序,并将其组织成搜索树。

散列或比较函数只能作用于键。与键关联的值不不能进行散列或比较

与集一样,散列映射比树映射稍微快一些,所以在不需要按照排列顺序访问键的时候,最好选用散列映射

OP->>要进行键值存储,必须使用put方法

OP->>要进行键值访问,必须使用get方法,且只能通过键来访问到值

OP->>如果找不到值却不想返回一个空对象,则使用getOrDefault(var1,var2),如果找不到值则返回var2。

键必须是唯一的,如果对一对映射调用两次put方法,则后一次调用会覆盖前一次调用。并返回第一次调用的结果

OP->>要进行键值对的移除,则要使用remove(键)的方法

OP->>要想获取键值对的数量,则要使用size()方法

OP->>要迭代处理每个键和值,最好是使用forEach方法,可以向这个方法提供一个lambda表达式,用来依次处理映射中的每一个元素

类似于scores.forEach((k,v)->System.out.println("key="+k+",value="+v));

下面示例程序演示了映射的操作过程,首先将键/值对添加到映射中。然后从映射中删除一个键,同时与之对应的值也被删除了。接下来,修改与某一个键对应的值,并调用get方法查看这个值。最后,迭代处理条目集。

代码:package Collection.Map;

import java.util.*;

public class MapTest {

public static void main(String[] args) {

Map staff=new HashMap<>();

staff.put("144-25-5464", new Employee("Amy Lee"));

staff.put("567-24-2546", new Employee("Harry Hacker"));

staff.put("157-62-7935", new Employee("Gary Cooper"));

staff.put("456-62-5527", new Employee("Francesca Cruz"));

//打印所有成员

System.out.println(staff);

//删除某一成员

staff.remove("567-24-2546");

//替代一个成员

staff.put("456-62-5527", new Employee("Francesca Miller"));

//查看一个成员

System.out.println(staff.get("157-62-7935"));

//遍历映射

staff.forEach((k,v)->System.out.println("key="+k+",value="+v));

}

}

class Employee{

String name;

public Employee(String name) {

this.name = name;

}

public String toString() {

return "[name="+name+"]";

}

}

运行结果:

下面是接口Map中常用的几个方法及其解释:

V get(Object key)

获取与键对应的值;返回与键对应的对象,如果在映射中没有这个对象则返回null。键可以为null。

default V getOrDefault(Object key,V defaultValue)

获得与键关联的值;返回与键关联的对象,或者如果未在映射中找到这个键,则返回defaultValue。

V put(K key,V value)

将键与对应的值关系插入到映射中。如果这个键已经存在,新的对象将取代与这个键对应的旧对象。这个方法将返回键对应的旧值。如果这个键以前没有出现过则返回null。键可以为null,但值不能为null。

void putAll(Map extends K,? extends V> entries)

将给定映射中所有条目添加到这个映射中。

boolean containsKey(Object key)

如果映射中已经有这个键,则返回true。

boolean containsValue(Object value)

如果映射中已经有这个值,返回true。

default void forEach(BiConsumer super K,? super V> action)

对这个映射中的所有键/值应用这个动作。

下面是HashMap类中的常用方法:

HashMap()

HashMap(int initialCapacity)

HashMap(int initialCapacity,float loadFactor)

用给定的容量和装填因子构造一个空散列映射(装填因子是一个0.0~1.0之间的一个数值。这个数值决定散列表填充百分比。一旦到了这个比例,就要将其再散列到更大的表中)。默认的装填因子是0.75。

下面是TreeMap类中常用的方法:

TreeMap()

为实现Comparable接口的键构造一个空的树映射。

TreeMap(Comparator super K> c)

构造一个树映射,并使用一个指定的比较器对键进行排序。

TreeMap(Map extends K,? extends V> entries)

构造一个树映射,并将某个映射中的所有条目添加到树映射中。

TreeMap(SortedMap extends K,? extends V> entries)

构造一个树映射,将某个有序映射中的所有条目添加到树映射中,并使用与给定的有序映射相同的比较器。

下面是SortedMap接口的一些重要的方法:

Comparator super K> comparator()

返回键进行排序的比较器。如果键是用Comparable接口的comparaTo方法进行比较的,返回null。

K firstKey()

K lastKey()

返回映射中最小元素和最大元素。

云海天教程网,大量的免费Java入门教程,欢迎在线学习!

java 映射类的方法_java什么是映射相关推荐

  1. java日历类add方法_Java日历computeTime()方法及示例

    java日历类add方法 日历类computeTime()方法 (Calendar Class computeTime() method) computeTime() method is availa ...

  2. java日历类add方法_Java日历computeFields()方法及示例

    java日历类add方法 日历类的computeFields()方法 (Calendar Class computeFields() method) computeFields() method is ...

  3. java日历类add方法_Java日历setFirstDayOfWeek()方法与示例

    java日历类add方法 日历类setFirstDayOfWeek()方法 (Calendar Class setFirstDayOfWeek() method) setFirstDayOfWeek( ...

  4. java日历类add方法_Java日历setMinimalDaysInFirstWeek()方法与示例

    java日历类add方法 日历类setMinimalDaysInFirstWeek()方法 (Calendar Class setMinimalDaysInFirstWeek() method) se ...

  5. java最终类最终方法_Java中,什么是最终类与最终方法?它们的作用是什么?

    final class A {},这样定义的类A就是最终类,最终类不可被继承,也就是说,不能写这样的代码,class B extends A {}了. final void B() {},这样定义的方 ...

  6. java测试类 main方法_Java使用agent实现main方法之前的实例详解

    Java使用agent实现main方法之前的实例详解 创建Agent项目 PreMainExecutor 类,在main方法之前执行此方法 public class PreMainExecutor { ...

  7. java定义类属性方法_java定义类、属性、方法

    Java是面向对象的程序设计语言,Java语言提供了定义类.定义属性.方法等最基本的功能.类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对 ...

  8. java 匿名类调用方法_Java匿名内部类使用与示例

    首先说为什么有匿名类(产生的使命) 两个原因 1.简化代码编写 某种情况下,类只需要扩展一个方法,没必要为了一个方法单独去写一个子类,然后然后调用子类,此时需要匿名类 2.在不同的包内的类内调用类的p ...

  9. java访问类的方法_Java:如何从另一个类访问方法

    小编典典 你需要以某种方式为Alpha类提供对cBeta的引用.有三种方法可以做到这一点. 1)在构造函数中为Alphas提供Beta.在Alpha课堂上写道: public class Alpha ...

  10. java 匿名类调用方法_java – 从匿名类调用新定义的方法

    好问题.答案是否你不能直接调用date.someMethod(); 我们先来了解这是什么. Date date = new Date() { ... }; 以上是延续Date类的匿名(没有名称)子类. ...

最新文章

  1. flutter中的路由跳转
  2. Flutter底部导航栏的实现
  3. K8S集群搭建:虚拟机克隆
  4. #我要上首页# 新版博客首页来了,做明星博主还会远吗?
  5. php+原生代码+赋值,js重新赋值原生的方法
  6. java连接mysql封装代码_JDBC连接数据库方法的封装,以及查询数据方法的封装
  7. mac 下开发golang 配置
  8. ORA-01033问题:定位redo日志进行不完全恢复启库实战案例
  9. vue2.0和3.0引入阿里字体图标库的步骤
  10. 工作8年的普通专科生程序员的一些感悟
  11. OpenGL 动画的制作
  12. 腾讯QQ修改密保手机
  13. emplace_back()
  14. Python经典实验4-字典和集合的应用
  15. 打造完整网络直播方案
  16. Tpfancontrol使用说明
  17. Android应用实例之----MifareUltralight格式的nfc标签读写
  18. CSUST 2021银川选拔赛
  19. ghost安装器v1.5.11.5绿色免费版 ​
  20. 写爆款文案需要把握的四个维度

热门文章

  1. [转载]MTK入门教程
  2. php图片资源管理软件,通用图形资源管理与查询系统FastMap - 飞时达软件
  3. 纯前端实现pdf分页下载,完美支持横屏竖屏
  4. AceAdmin In MVC之控件
  5. Linux 安装QT5
  6. 第七版(谢希仁)计算机网络 知识点总结
  7. 2022华为杯研究生数学建模竞赛F题思路解析
  8. ubuntu16.04下运行海康威视网络摄像头sdk(qtdemo)
  9. SQL 插入时直接插入当前时间
  10. webstorm快捷键生成html页面,webStorm快捷键总结