映射_映射模式 - CSDN
精华内容
参与话题
  • 程序里的映射是什么意思?

    万次阅读 多人点赞 2016-10-08 16:27:54
    映射就是给一个对象(可以是变量、物体、等等)起一个唯一的别名。 例如java中的Map就是一个表达映射的类。 Map names = new HashMap(); names.put("编号9527", "唐伯虎"); 这个例子就是把编号9527映射到唐伯虎...
    映射就是给一个对象(可以是变量、物体、等等)起一个唯一的别名。
    例如java中的Map就是一个表达映射的类。
    Map names = new HashMap();
    names.put("编号9527", "唐伯虎");
    这个例子就是把编号9527映射到唐伯虎上,只需要告诉程序你要找编号9527,程序就能找到唐伯虎。这就是映射
    展开全文
  • 什么是映射?如何清晰的理解映射

    万次阅读 多人点赞 2018-07-22 12:25:15
    我们在计算机科学和数学里经常用到映射概念,这里打个比方就容易理解了 不废话 直接作出最直白的解释 : 生活里存在大量的对应 : 比如一个人的身份证号对应一个人 一张电影票对应一个人 一个丈夫配一个妻子 或者一...

    我们在计算机科学和数学里经常用到映射概念,这里打个比方就容易理解了

    不废话 直接作出最直白的解释 :

    生活里存在大量的对应 :

    比如一个人的身份证号对应一个人 一张电影票对应一个人  一个丈夫配一个妻子

    或者一个丈夫配多个妻子??!!(对,就是你脑补的那些画面)

    说白了 映射就是一种特殊的对应关系

    生活里 一箭射一只鸟 多箭射一只鸟 一箭射多只鸟

    映射里 每一箭必须射到鸟 还不能一箭射多只鸟 

    对的 就跟你这个单身狗一样 家里催着你必须结婚 还只能结一个

    在计算机科学里就相应的这么理解:

     

    映射就是将两个对象对应起来

    对应的对象叫象

    被对应的对象叫原象

    以java中的map举例

    Map names = new HashMap();

    names.put("9527", "唐伯虎");

    这里就将9527和唐伯虎对应起来

    建立了两者的映射(对应)

    9527就是唐伯虎

     

    展开全文
  • Java之映射

    万次阅读 2020-07-10 17:46:56
    集是一个集合,它可以快速地...映射(map)数据结构就是为此而设计的。映射用来存放键/值对。如果提供了键,就能够查找到值。它们之间是一一对应关系。 1.基本映射操作: Java类库为映射提供了两个通用的实现:Has...

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

    1.基本映射操作

    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<String,Employee> 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()

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

    2.更新映射项

    我们从前面的方法中知道,更新一个映射项使用的是put方法,但是,考虑下面一种情况,假如我想将下面一段话进行单词统计,然后将得到的结果存放到一个映射表中。

    句子:I am a handsome boy and you are a beautiful girl , so we can marry , then make love , finally create new lives . I believe certainly that our son will be a handsome boy and daughter will be a beautiful girl too , because I am a handsome boy and you are a beautiful girl .

    我们可以定义一个counts的映射表。如果我们想向里面添加元素,我们会想如下那样做:

    counts.put(word,counts.get(word)+1);

    但是有一个问题,如果原先映射表中不存在这个单词,get方法就会返回一个null,这个时候就会抛出一个NullPointerException异常。代码和结果如下:

    package Collection.Map;
    
    import java.util.*;
    
    public class MapTest2 {
    
    	public static void main(String[] args) {
    		String words="I am a handsome boy and you are a beautiful girl , so we can marry , then make love , finally create new lives . I believe certainly "
    				+ "that our son will be a handsome boy and daughter will be a beautiful girl too , because I am a handsome boy and you are a beautiful girl .";
    		Map<String,Integer> counts=new HashMap<>();
    		Scanner in=new Scanner(words);
    		String word=null;
    		while(in.hasNext()) {
    			word=in.next();
    			counts.put(word, counts.get(word)+1);
    		}
    		in.close();
    		System.out.println(counts);
    	}
    
    }

    结果:

    如果就使用前面我们所介绍方法,可以有以下两种解决方案,第一种是在使用put方法之前首先进行检查,第二种是使用getOrDefault方法。

    下面是两种示例代码:

    第一种:

    package Collection.Map;
    
    import java.util.*;
    
    public class MapTest2 {
    
    	public static void main(String[] args) {
    		String words="I am a handsome boy and you are a beautiful girl , so we can marry , then make love , finally create new lives . I believe certainly "
    				+ "that our son will be a handsome boy and daughter will be a beautiful girl too , because I am a handsome boy and you are a beautiful girl .";
    		Map<String,Integer> counts=new HashMap<>();
    		Scanner in=new Scanner(words);
    		String word=null;
    		while(in.hasNext()) {
    			word=in.next();
    			if(counts.get(word)==null) {
    				counts.put(word,1);
    			}else {
    				counts.put(word, counts.get(word)+1);
    			}	
    		}
    		in.close();
    		System.out.println(counts);
    	}
    }

    第二种:

    package Collection.Map;
    
    import java.util.*;
    
    public class MapTest2 {
    
    	public static void main(String[] args) {
    		String words="I am a handsome boy and you are a beautiful girl , so we can marry , then make love , finally create new lives . I believe certainly "
    				+ "that our son will be a handsome boy and daughter will be a beautiful girl too , because I am a handsome boy and you are a beautiful girl .";
    		Map<String,Integer> counts=new HashMap<>();
    		Scanner in=new Scanner(words);
    		String word=null;
    		while(in.hasNext()) {
    			word=in.next();
    			counts.put(word, counts.getOrDefault(word, 0)+1);
    		}
    		in.close();
    		System.out.println(counts);
    	}
    
    }

    结果:...

    除了像以上那样进行修改,下面还可以提供两种方法使其做的更好:

    第一种是使用putIfAbsent方法,从字面意思上理解,就是不在的时候放入,正如我们所想,就是这样。具体在这个例子中使用的时候首先调用这个方法,如果不存在就放入一个0,然后调用put方法。第二种就是使用merge方法,merge方法是解决这个问题最好的方法,merge方法可以简化这个常见的操作,如果原先的键不存在,下面的调用:counts.merge(word,1,Integer::sum);将把word与1关联,否则使用Integer::sum方法组合原值和1(也就是将原值和1求和)。下面演示这两个解决方案:

    方案1:

    package Collection.Map;
    
    import java.util.*;
    
    public class MapTest2 {
    
    	public static void main(String[] args) {
    		String words="I am a handsome boy and you are a beautiful girl , so we can marry , then make love , finally create new lives . I believe certainly "
    				+ "that our son will be a handsome boy and daughter will be a beautiful girl too , because I am a handsome boy and you are a beautiful girl .";
    		Map<String,Integer> counts=new HashMap<>();
    		Scanner in=new Scanner(words);
    		String word=null;
    		while(in.hasNext()) {
    			word=in.next();
    			counts.putIfAbsent(word, 0);
    			counts.put(word, counts.get(word)+1);
    		}
    		in.close();
    		System.out.println(counts);
    	}
    
    }
    

    方案二:

    package Collection.Map;
    
    import java.util.*;
    
    public class MapTest2 {
    
    	public static void main(String[] args) {
    		String words="I am a handsome boy and you are a beautiful girl , so we can marry , then make love , finally create new lives . I believe certainly "
    				+ "that our son will be a handsome boy and daughter will be a beautiful girl too , because I am a handsome boy and you are a beautiful girl .";
    		Map<String,Integer> counts=new HashMap<>();
    		Scanner in=new Scanner(words);
    		String word=null;
    		while(in.hasNext()) {
    			word=in.next();
    			counts.merge(word, 1, Integer::sum);
    		}
    		in.close();
    		System.out.println(counts);
    	}
    
    }

    结果同上。

    下面给出了几个常见的关于更新映射项的方法:

    default V merge(K key,V value,Bifunction<? super Vzaa,? super V,? extends V> remappingFunction)

    如果key与一个非null值v关联,将函数应用到v和value,将key与结果关联,或者如果结果为null,则删除这个键。否则,将key与value关联,返回get(key)

    default V compute(K key,Bifunction<? super K,? super V,? extends V> remappingFunction)

    将函数应用到key和get(key)。将key与结果相关联。或者如果结果为null,则删除这个键,返回get(key)

    default V computeIfPresent(K key,Bifunction<? super K,? super V,? extends V> remappingFunction)

    如果key与一个非null值v关联,将函数应用到key和v,将key与结果关联,或者如果为null,则删除这个键。返回get(key)

     

    default V computeIfAbsent(K key,Function<? super K,? extends V> mappingFunction)

    将函数应用到key,除非key与一个非null值关联。键key与结果关联,或者如果结果为null,则删除这个键,返回get(key)

    default replaceAll(Bifunction<? super K,? super V,? extends V> remappingFunction)

    在所有映射项上应用函数。将键与非null结果关联,对于null结果,则将相应的键删除。

    3.映射视图

    有时候我们需要查看映射中的键集合,值集合(因为值可能存在相同的元素,所以严格来说不算是一个集合),以及键/值对集合。

    下面三种方式分别返回键集合,值集合,键/值对集合

    Set<K> keySet()
    Collection<V> values()
    Set<Map.Entry<K,V>> entrySet()

    下面一个程序演示了以上方法的调用,及其使用意义:

    代码:

    package Collection.Map;
    
    import java.util.*;
    import java.util.Map.Entry;
    
    public class MapView {
    	public static void main(String[] args) {
    		Map<String,Integer> test=new HashMap<>();
    		test.put("于理想",1);
    		test.put("张琛",2);
    		test.put("张艳杰",3);
    		test.put("张哲鑫",4);
    		test.put("闫智",5);
    		test.put("孙崇伟",6);
    		
    		//下面枚举键:
    		Set<String> keys=test.keySet();
    		for(String key:keys) {
    			System.out.print(key+" ");
    		}
    		System.out.println();
    		
    		//下面枚举值:
    		Collection<Integer> values=test.values();
    		for(Integer value:values) {
    			System.out.print(value+" ");
    		}
    		System.out.println();
    		
    		//下面枚举键/值对
    		Set<Map.Entry<String, Integer>> mapping=test.entrySet();
    		for(Map.Entry<String, Integer> map:mapping) {
    			System.out.print(map+" ");
    		}
    		System.out.println();
    		//注意:上面最后一个曾经是访问所有映射条目的最有效的方法,但是,现在只需要使用forEach方法即可;
    		test.forEach((k,v)->System.out.println("键="+k+",值="+v));
    	}
    }

    运行结果:

    4.链接散列集与映射

    它们是LinkedHashSet和LinkedHashMap,这两个将键/值对以插入顺序排列,其他的和HashMap基本完全一样。

    参考资料《Java核心技术 卷I 第10版》

    展开全文
  • 关于数据映射

    千次阅读 2018-06-21 15:12:01
    数据映射(Data Mapping):给定两个数据模型,在模型之间建立起数据元素的对应关系,将这一过程称为数据映射。数据映射是很多数据集成任务的第一步,例如:数据迁移(data migration)、数据清洗(data cleaning)...

    数据映射(Data Mapping):给定两个数据模型,在模型之间建立起数据元素的对应关系,将这一过程称为数据映射。数据映射是很多数据集成任务的第一步,例如:数据迁移(data migration)、数据清洗(data cleaning)、数据集成、语义网构造、p2p信息系统。

     

        数据映射的方式有两种:手工编码(Hand-coded)和可视化操作(Graphical manual)。手工编码是直接用类似XSLT,JAVA,C++这样的编程语言定义数据对应关系。可视化操作通常支持用户在数据项之间画一条线以定义数据项之间的对应关系。有些支持可视化操作的工具可以自动建立这种对应关系。这种自动建立的对应关系一般要求数据项具有相同的名称。无论采用手工方式操作还是自动建立关系,最终都需要工具自动将图形表示的对应关系转化成XSLT,JAVA,C++这样的可执行程序。

        目前数据映射领域存在两个前沿的研究方向:
        数据驱动的映射:利用统计方法分析源数据库和目标数据库的实际数据,挖掘出数据对应关系。这种方法可以发现数据之间的“substring”,“concatenations”,“arithmetic”,“case statements”等转换逻辑。这种方法还可以用于发现异常情况,也就是不符合已定义转换逻辑的数据。

        那么数据映射和数据迁移是什么关系呢?

        通常,数据迁移包括三个阶段:数据抽取(extract),数据转换(transform),数据加载(load),也就是俗称的ETL。但是如何抽取,如何转换,加载到什么位置这些问题都需要有一个明确的规则指导。因此这主需要数据映射来定义这些规则。这有点像软件开发过程中的设计与开发。数据映射相当于软件设计、ETL的执行代码实现过程相当于软件开发。

    引用原文【设计侵权请联系我处理】

    展开全文
  • Java中就什么是映射的简单理解

    千次阅读 2018-09-27 23:19:33
    映射是一种特殊的对应关系。 打个比方,生活中一只箭可以射中一只鸟,也可以射不中,甚至可以射中几只。但是在程序中,这只箭必须射中一只,而且也只能能射中一只。 正常一点的理解就是: 映射就是把两个对象对应...
  • windows下端口映射(端口转发)

    万次阅读 2017-04-18 15:58:05
    应用场景如:原本有个服务程序在PC2上运行,侦听着PC2上的B端口,现在希望在不动PC2及服务程序的前提下,外界能通过PC1的A端口与PC2上服务程序通信,这时就需要用端口映射(端口转发)来解决。 将PC1的A端口映射到...
  • Cache —— Cache和主存的映射方式

    千次阅读 多人点赞 2019-11-26 16:31:35
    地址映射:地址映射是一种规则,它指明了把主存地址空间映射到Cache地址空间所用的规则,即把存放在主存中的程序按照某种规则装入Cache。由于Cache的块数比主存块数少得多,因此需要加入 主存字块标记 和 字块内地址...
  • 映射是现代数学中的一个基本概念,而函数是微积分的研究对象,也是映射的一种 1.映射概念 设X、YX、YX、Y是两个非空集合,如果存在一个法则fff,使得对XXX中每个元素xxx,按法则fff,在YYY中有唯一确定的元素yyy与之...
  • 【图文讲解】映射——单射-双射-满射概念

    万次阅读 多人点赞 2019-06-30 09:53:03
    最近看的一篇论文里出现了partial map的概念,用我的散装英文乍一翻译——“部分映射”? 印象中高中和大一的高数书里都讲过,但一些概念已经忘差不多了(罪过罪过- -),索性重新熟悉一下。 百度,发现“部分...
  • 什么是映射?为什么需要映射

    千次阅读 2014-06-20 00:53:12
    通过赋予每个任务不同的虚拟–物理地址转换映射,支持不同任务之间的保护。地址转换函数在每一个任务中定义,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的...
  • 把本地文件夹映射成磁盘

    万次阅读 2017-10-04 20:47:27
    把本地文件夹映射成磁盘
  • hosts文件里面做域名映射

    万次阅读 2017-10-13 10:45:10
    有时候在开发时遇到不能通过ip来访问必须通过域名访问,所以要在hosts文件里面做域名 映射.
  • springboot配置本地资源映射路径需要配置一下映射资源位置,当时springboot1.x和spring波特2.x的配置方法不同,这里就分开记录一下配置过程。 1、springboot 1.x配置 @Configuration public class ...
  • 如果一个参数的选项格式是[],比如 -H=[]host -p=[]portdirection 这都意味着这个flag可以多次出现,所以此处可以多次指定端口映射规则。 例:docker run -d -p 80:80 -p 22:22
  • docker 给运行中的容器设置端口映射

    万次阅读 2016-09-13 09:46:15
    DOCKER 给运行中的容器添加映射端口 方法1 1、获得容器IP 将container_name 换成实际环境中的容器名 docker inspect `container_name` | grep IPAddress1 2、 iptable转发端口 将容器的8000端口映射到docker...
  • excel的XML映射

    万次阅读 2015-09-02 15:31:44
    通过使用 XML 映射,可以轻松地从 Excel 文档中添加、确定和提取特定业务数据。 例如,包含客户姓名和地址的发票或包含上一季度财务结果的报告不再只是静态报告。 可以轻松地从数据库和应用程序中导入此信息,对其...
  • 线性代数(三) : 线性映射与矩阵

    万次阅读 2013-07-09 09:46:35
    1 映射 映射这个概念中学就学过,复习一下: 集合X到集合U上的映射T是定义在X上,取值在U内的一个函数:f(x) =u 记作 T : X->U  一个简单的映射的例子: 2 线性映射 有了之前线性空间等概念,我们直接给出线性映射...
  • 线性代数(十三) : 可逆映射与逆映射

    万次阅读 2013-07-18 14:14:31
    求解线性方程Ax=0
  • 远程桌面映射本地硬盘

    万次阅读 2016-02-23 08:47:48
    1.为了方便本地计算机与远程服务器之间的文件传输,可以使用映射本地磁盘的功能。如下图,在远程桌面中选择“本地资源”选项卡,点击“详细信息”勾选本地驱动器。 2.映射成功,登陆远程桌面后,在服务器中的“我的...
  • 如何把内网IP映射到公网IP

    万次阅读 2017-12-06 11:04:01
    我们讲了如何搭建网站,可是有很多小伙伴私信跟我说怎么映射,今天我就教大家如何把内网地址映射到公网! 我们所需要的工具有: 内网IP(这个是品,也是必有的!) nat123(这是映射软件,百度上都能...
1 2 3 4 5 ... 20
收藏数 1,660,802
精华内容 664,320
关键字:

映射