Map实例讲解
vue使用new map用法
vue使用new map用法
Vue中的Map是ES6中新增的数据结构之一,与Array、Object相似,Map 也用于存储一组数据,不过它的存储方式与其他两种不同。Map数据结构是一种能够将键值绑定在一起的对象,其中键和值都可以是任何类型。Map对象在存储数据方面比简单对象更灵活,也更具可扩展性和可读性。在Vue应用程序中,Map可以用于存储任意的键值对,并提供极快的存取和搜索。
在Vue中使用Map类型的变量,可以通过new Map的形式进行初始化。在Vue组件中,在data中声明Map变量的用法与声明其他变量是相同的,例如:
javascript
data(){
return {
myMap: new Map(),
};
},
经过初始化后,myMap就成为了一个Map对象实例,可以使用Map中实现的各种方法来操作其中的键值对。
以下是常用的Map对象方法:
1. set(key, value):向Map对象中添加键值对,如果Map对象中已经存在该键,则会更新键对应的值。
javascript
let myMap = new Map();
myMap.set('name', 'T om');
2. get(key):根据键来获取值,如果Map对象中不存在对应的键,则返回undefined。
javascript
let myMap = new Map();
myMap.set('name', 'T om');
console.log(myMap.get('name'));
3. has(key):检查Map对象中是否存在对应的键,返回值为true或false。
mapgis实验(实例)教程实验六空间分析
2.缓冲区分析
在对城镇土地进行分等定级的过程中,土地质量的好坏与距离道路的远近有关,现求一组道路的缓冲区。
在空间分析窗口中打开“\实习六\缓冲区\道路.wl”
进行线缓冲区分析
图1
图2
图3
在编辑子系统中打开观看效果。
把中间的无用区删除就是我们要的结果。
点和区的缓冲区用法自己练习。
实验六 空间分析
1.空间叠加
1.1打开土壤图观察其图形和属性。
(1)首先启动mapgis。
新建工程文件。
Βιβλιοθήκη Baidu点击确定。
点击确定。
在左边控制台窗口点击鼠标右键。
启动添加项目快捷菜单。
在实习六中的土地利用现状图文件夹中选中现状图点线面三个文件并打开。
将*.wp文件,也即区文件移到工程的顶端,同时将三个文件设置为当前可编辑。
3.空间检索
3.1相邻区域检索
利用此功能可以在河南省行政区图上检索出与郑州市相邻的地市。
在空间分析窗口中打开“\实习六\检索\河南省图.wp”
(图1)
图2
然后在图上点击郑州市
图3
图4
3.2条件检索
求耕地面积大于45万公顷的地市。
图1
图2
图3
在右边的窗口中1:1显示图形。
查看图斑属性。
保存当前工程,方法是在右边的控制台窗口中点击右键,然后启动保护工程快捷菜单。
java声明map的几种写法
java声明map的几种写法
在Java中,我们可以使用不同的方式来声明Map变量,以下是几种常见的写法:
1. 使用HashMap类声明Map变量:
java.
Map<String, Integer> map1 = new HashMap<>();
在这种写法中,我们使用了HashMap类来实例化Map变量,指定了键的类型为String,值的类型为Integer。
2. 使用TreeMap类声明Map变量:
java.
Map<String, Integer> map2 = new TreeMap<>();
这种写法使用了TreeMap类来实例化Map变量,它会按照键的
自然顺序进行排序。
3. 使用LinkedHashMap类声明Map变量:
java.
Map<String, Integer> map3 = new LinkedHashMap<>();
在这种写法中,我们使用LinkedHashMap类来实例化Map变量,它会记住元素的插入顺序。
4. 使用Map接口声明,并由具体实现类来实例化Map变量:
java.
Map<String, Integer> map4 = new HashMap<>();
这种写法是通过Map接口声明变量,然后由具体的实现类来实
例化Map变量,这样可以根据需要灵活地选择不同的Map实现类。
以上是几种常见的声明Map变量的写法,每种写法都有其适用
的场景,可以根据具体的需求来选择合适的声明方式。
vue遍历MapMap在vue中的使用方法
vue遍历MapMap在vue中的使用方法Vue可以使用`v-for`指令来遍历Map对象。
在Vue中使用Map需要注意以下几个步骤:
1. 定义Map数据
2. 在Vue模板中使用`v-for`指令遍历Map
下面我们来一步一步介绍如何使用Map对象并在Vue中进行遍历。
### 定义Map数据
要定义一个Map对象,可以使用ES6的语法创建一个新的Map实例,并使用`set`方法向Map中添加键值对。
```javascript
const myMap = new Map(;
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
myMap.set('key3', 'value3');
```
### 在Vue中使用v-for指令遍历Map
在Vue模板中,可以使用`v-for`指令来遍历Map对象。在v-for指令中,我们需要使用`Object.entries`方法将Map对象转换为`[key, value]`的数组形式。
```html
<template>
<div>
<div v-for="item in mapToArray(myMap)" :key="item.key"> {{ item.key }}: {{ item.value }}
</div>
</div>
</template>
<script>
export default
dat
return
myMap: new Map
map.of方法 -回复
map.of方法-回复
什么是map.of方法?如何使用它?(1500-2000字)
Map.of方法是Java编程语言中引入的一种可用于创建不可修改的Map 实例的便捷方法。它可以通过提供一对一的键值对来实例化Map集合。本文将详细介绍Map.of方法的具体用法和示例,帮助读者理解和使用这一强大的Java方法。
在介绍Map.of方法之前,我们先来了解一下Map和键值对的概念。Map 是Java编程语言中一种常用的集合类型,它将键和值进行映射,以便进行快速的查找和访问。Map中的键是唯一的,而值可以重复。键值对是Map中最基本的元素,每个元素包含一个键和它对应的值。
在Java 9之前,我们通常使用以下方式来创建一个Map实例:
Map<String, Integer> map = new HashMap<>();
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
上面的代码创建了一个HashMap实例,并向其中添加了三个键值对。这种方式需要我们手动调用put方法来添加键值对,稍显繁琐。
Java 9中引入的Map.of方法能够简化上述代码,并提供了一种更简洁的方式来创建Map实例。Map.of方法使用一对一的键值对来实例化Map 集合,例如:
Map<String, Integer> map = Map.of("One", 1, "Two", 2, "Three", 3);
上面的代码使用Map.of方法创建了一个包含三对键值对的Map实例。"One"对应的键的值是1,"Two"对应的键的值是2,"Three"对应的键的值是3。注意,这里的Map实例是不可修改的,即不能再向其中添加或删除键值对。
C++中map的基本操作
C++中map的基本操作
1、map简介
map是⼀类关联式容器。它的特点是增加和删除节点对迭代器的影响很⼩,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,⽽不能修改key。
2、map的功能
⾃动建⽴Key - value的对应。key 和 value可以是任意你需要的类型。
根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
快速插⼊Key - Value 记录。
快速删除记录
根据Key 修改value记录。
遍历所有记录。
3、使⽤map
使⽤map得包含map类所在的头⽂件
#include <map> //注意,STL头⽂件没有扩展名.h
map对象是模板类,需要关键字和存储对象两个模板参数:
std:map<int, string> personnel;
这样就定义了⼀个⽤int作为索引,并拥有相关联的指向string的指针.
为了使⽤⽅便,可以对模板类进⾏⼀下类型定义,
typedef map<int, CString> UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;
4、在map中插⼊元素
改变map中的条⽬⾮常简单,因为map类已经对[]操作符进⾏了重载
enumMap[1] = "One";
enumMap[2] = "Two";
.....
这样⾮常直观,但存在⼀个性能的问题。插⼊2时,先在enumMap中查找主键为2的项,没发现,然后将⼀个新的对象插⼊enumMap,键是2,值是⼀个空字符串,插⼊完成后,将字符串赋为"Two"; 该⽅法会将每个值都赋为缺省值,然后再赋为显⽰的值,如果元素是类对象,则开销⽐较⼤。我们可以⽤以下⽅法来避免开销:
Java核心数据结构(List、Map、Set)原理与使用技巧
Java核⼼数据结构(List、Map、Set)原理与使⽤技巧
JDK提供了⼀组主要的数据结构实现,如List、Set等常⽤数据结构。这些数据都继承⾃java.util.Collection接⼝,并位于java.util包内。⼀、List接⼝
最重要的三种List接⼝实现:ArrayList、Vector、LinkedList。它们的类图如下:
可以看到,3种List均来⾃AbstratList的实现。⽽AbstratList直接实现了List接⼝,并扩展⾃AbstratCollection。
ArrayList和Vector使⽤了数组实现,可以认为,ArrayList封装了对内部数组的操作。⽐如向数组中添加、删除、插⼊新的元素或数组的扩展和重定义。对ArrayList或者Vector的操作,等价于对内部对象数组的操作。
ArrayList和Vector⼏乎使⽤了相同的算法,它们的唯⼀区别可以认为是对多线程的⽀持。ArrayList没有对⼀个⽅法做线程同步,因此不是线程安全的。Vector中绝⼤多数⽅法都做了线程同步,是⼀种线程安全的实现。因此ArrayList和Vector的性能特性相差⽆⼏。
LinkedList使⽤了循环双向链表数据结构。LinkedList由⼀系列表项连接⽽成。⼀个表项总是包含3个部分:元素内容、前驱表项和后驱表项。如图所⽰:
LinkedList的表项源码:
private static class Node<E> {
E item;
Node<E> next;
typescriptmap方法
typescriptmap方法
在TypeScript中,Map是一种数据结构,用于存储键值对的集合。Map可以用来存储任何类型的键和任何类型的值,并且可以动态地增加或删除键值对。Map还提供了一些特殊方法来方便地操作数据。
首先,我们可以使用Map构造函数来创建一个新的Map实例。可以通过传递一个二维数组作为参数来初始化Map对象。二维数组的每个元素都表示一个键值对,其中第一个元素表示键,第二个元素表示值。
```typescript
let map = new Map
['key1', 'value1'],
['key2', 'value2'],
['key3', 'value3']
]);
```
我们还可以使用set(方法向Map对象添加新的键值对。
```typescript
map.set('key4', 'value4');
```
可以使用get(方法来获取指定键对应的值。
```typescript
let value = map.get('key1');
```
如果一些键不存在于Map对象中,get(方法会返回undefined。
删除键值对可以使用delete(方法。
```typescript
map.delete('key1');
```
可以使用has(方法来判断指定的键是否存在于Map对象中。
```typescript
if (map.has('key1'))
// do something
```
Map对象还提供了一个特殊的方法keys(,用于返回包含Map对象中所有键的迭代器。
```typescript
Matlab——m_map指南(3)——实例
Matlab——m_map指南(3)——实例m_map 实例
1、
clear all
m_proj('ortho','lat', 48,'long',-123');%投影⽅式,范围
m_coast('patch','r');%红⾊填充
m_grid('linest','-','xticklabels',[],'yticklabels',[]);%标注为空
patch(.55*[-1 1 1 -1],.25*[-1 -1 1 1]-.55,'w');%四个点,⽩⾊填充
text(0,-.55,'M\_Map','fontsize',25,'color','b',...
'vertical','middle','horizontal','center');%填充内容,属性要求,垂直⽔平居中,斜杠转义符
set(gcf,'units','inches','position',[2 2 3 3]);%设置图⽚⼤⼩
set(gcf,'paperposition',[3 16 6 6]);%[left bottom width height].
2.
clear all
m_proj('lambert','long',[-160 -40],'lat',[30 80]);
m_coast('patch',[1 .85 .7]);%填充海岸线
m_elev('contourf',[500:500:6000]);%海深等⾼线
m_grid('box','fancy','tickdir','in');
colormap(flipud(copper));%翻转三原⾊的顺序排列,重新画图
map reduce的应用实例
"MapReduce的应用实例"
MapReduce是一种用于并行处理大规模数据集的编程模型,也是Hadoop框架中最核心的组件之一。它将数据处理过程分解为Map (映射)和Reduce(规约)两个阶段,以便在分布式计算环境下高效地处理海量数据。今天,我将为大家介绍MapReduce的应用实例,以帮助大家更好地理解这一概念。
1. 电商数据分析
在电商行业中,数据分析是至关重要的。通过MapReduce框架,我们可以对用户行为数据、销售数据和库存数据进行大规模的并行处理和分析。在Map阶段,可以将用户行为数据映射为<用户ID, 行为类型>的键值对,将销售数据映射为<产品ID, 销售数量>的键值对,将库存数据映射为<产品ID, 库存数量>的键值对;在Reduce阶段,则可以根据用户行为类型统计用户行为次数,根据产品ID统计销售数量和库存情况,从而为电商企业提供决策支持和业务优化建议。
2. 社交网络分析
社交网络是另一个典型的大数据场景,MapReduce的应用在这里同样发挥着重要作用。在Map阶段,可以将用户关系数据、用户发布的内容数据、用户行为数据等映射为合适的键值对;在Reduce阶段,则可以根据用户关系计算用户之间的关联度,根据用户发布的内容进行情感分析和话题挖掘,从而为社交网络评台提供个性化推荐、舆情
监控和用户画像构建等服务。
3. 文本数据处理
在文本数据处理领域,MapReduce同样有着广泛的应用。在自然语
言处理任务中,可以将文本数据进行分词、词频统计等预处理工作,
mapreduce编程实例——词频统计实验总结
mapreduce编程实例——词频统计实验总结
本次实验是使用MapReduce编程模型进行词频统计。实验中首先了解了MapReduce的概念和原理,然后根据实际需求编写了相应的Mapper和Reducer函数,最后通过Hadoop集群执行MapReduce任务进行词频统计。
在实验过程中,遇到了一些问题和难点,下面对实验过程进行总结和分析。
首先,在编写Mapper函数时,需要从输入数据中获取每个单词,并将其转化为键值对的形式进行输出。在这个过程中,需要注意对输入数据进行预处理,包括分词、过滤停用词等,以保证输出结果的准确性。
其次,在编写Reducer函数时,需要对Mapper输出的键值对进行合并和统计。在这个过程中,需要使用哈希表等数据结构来保存中间结果,以便进行合并和统计操作。
最后,在提交MapReduce任务时,需要配置好Hadoop集群的相关参数,包括输入路径、输出路径、Mapper和Reducer类等。在这个过程中,需要注意使用合适的数据格式,以及对任务进行适当的拆分和分配,以提高任务的执行效率和并行度。
通过本次实验,我进一步了解了MapReduce编程模型的原理和应用,掌握了编写MapReduce程序的基本方法和技巧。同时,也感受到了MapReduce在
大数据处理方面的高效性和可扩展性。在今后的实际工作中,我将进一步应用和拓展这方面的知识,为数据分析和处理提供有效的解决方案。
c++数据结构map的使用详解
c++数据结构map的使⽤详解
⽬录
map的常⽤⽤法
1. 头⽂件
2. 定义
3. map 容器内元素的访问
(1)通过下标访问
(2)通过迭代器访问
(3)通过逆向迭代器访问
4. map 元素的插⼊
5. map 常⽤函数实例解析
(1)find()
(2)erase()
(3)size()
(4)count()
(5)clear()
(6)empty()
(7)lower_bound() 、upper_bound()
map的常⽤⽤法
map 表⽰映射,可以将任何基本类型(包括 STL 容器)映射到任何基本类型(包括 STL 容器),例如可以建⽴如 int 到double,string 到 int 的映射等。
map 提供⼀对⼀的 hash,该功能类似 Python 的字典:
第⼀个称为键( key ),每个关键字只能在 map 中出现⼀次;
第⼆个称为该键的值( value );
1. 头⽂件
<bits/stdc++.h> 头⽂件已经包括了该头⽂件。
2. 定义
定义 map 如下,参数的第⼀个为 key 的类型,第⼆个为 value 的类型。
map<typename1, typename2> mp;
【注意】如果是字符串到整型的映射,必须使⽤ string ⽽不能⽤ char 数组。
map 的键和值也可以是 STL 容器,例如可以将⼀个 set 容器映射到⼀个字符串:
map<set<int>, string> mp;
3. map 容器内元素的访问
(1)通过下标访问
注意:map 的键是唯⼀的。
C#中SharpMap的简单使用实例详解
C#中SharpMap的简单使⽤实例详解
本⽂是利⽤ShapMap实现GIS的简单应⽤的⼩例⼦,以供学习分享使⽤。关于SharpMap的说明,⽹上⼤多是以ShapeFile为例进⾏简单的说明,就连官⽹上的例⼦也不多。本⽂是⾃⼰参考了源代码进⾏整理的,主要是WinForm的例⼦。原理⽅⾯本⽂也不过多论述,主要是实例演⽰,需要的朋友还是以SharpMap源码进⾏深⼊研究。
什么是SharpMap ?
SharpMap是⼀个基于.net 2.0使⽤C#开发的Map渲染类库,可以渲染各类GIS数据(⽬前⽀持ESRI Shape和PostGIS格式),可应⽤于桌⾯和Web程序。代码⾏数近10000⾏,可以算是⼀个实现了最基本功能的GIS系统,有利于研究学习使⽤。
涉及知识点:
SharpMap的基本概念:Layer(图层,常⽤图层:VectorLayer,LabelLayer) , IProvider(数据提供者,常⽤数据源:Ogr(对应MapInfo),ShapFile,DataTablePoint(对应DataSet))
坐标转换:主要⽤于经纬度和地图坐标的转换。
SharpMap知识结构图:
效果图如下:
(⼀)车辆轨迹图:数据源:Excel数据
(⼆)定点数据(数据源:Excel)将河南省⼗七个城市,全部插上⼩红旗
(三)使⽤MapInfo做背景⽂件(此处通过程序调整了⽐例尺)
(四)使⽤ShapFile做背景图
核⼼代码
using BruTile.Predefined;
using GeoAPI.CoordinateSystems.Transformations;
Mapgis中经纬度转大地坐标超详细实例步骤
在MAPGIS图中,若发现在工程输出中,图幅在页面设置-系统自动检测幅面下很小(图1所示),通常有两个原因:(1)查看编辑模式下,图幅外围是否有东西,这点是通过图幅在1:1的情况下是否铺满框来检验,铺满(图2所示)则排除该种可能,反之则判定是该种可能;(2)查看图幅是否是经纬度(图3所示),如果是,则要进行投影变换(图4),将图幅的经纬度坐标转换成大地坐标。以下为投影变化的基本步骤。
图1工程输出中图幅大小示意图图2编辑模式下图幅分布示意图
图3经纬度状态下的图幅图4MAPGIS中的投影变换功能
1、打开投影变换,在文件下找到所需要编辑的文件,全选(图 5所示);
色S
A ®
T®XX
SpTp»F +H
•躍0502520105万2.51万5千2千1千5百旺
["LDLYAAAOOT.WL""LDLYAABD 能.WT""LDLYAA MATGISFiles(*.wl :*.wp.;1^.wt :<*i-.wn).▼
图5投影变换界面
2、选择P 投影转换下拉菜单一D 工作区直接投影转换一选择文 件并全选(图6所示);
图6工作区直接投影转换菜单
3、选择当前投影—坐标类型下选择投影平面直角(具体设置如
打开
查找范围(IP
laaB
LDLV^007.Wy L 'DLY
AA 'BOOZW LDLVA
A.DOOLWL
LDLVAAEOOL.WL LDLYAAE002.WP LDLYAAFOO1.WL
aBaanlB
LDL YAAIO0L.V.1L LFZYBBBOOZWL LDLVAAI002.WT LFZYBAAm.WL LFZYBACOOL.WT LFZYBADOOL.WT LFZ'/BADOOJ.WL
Mapreduce实例——排序
Mapreduce实例——排序
原理
Map、Reduce任务中Shuffle和排序的过程图如下:
流程分析:
1.Map端:
(1)每个输⼊分⽚会让⼀个map任务来处理,默认情况下,以HDFS的⼀个块的⼤⼩(默认为64M)为⼀个分⽚,当然我们也可以设置块的⼤⼩。map输出的结果会暂且放在⼀个环形内存缓冲区中(该缓冲区的⼤⼩默认为100M,由io.sort.mb属性控制),当该缓冲区快要溢出时(默认为缓冲区⼤⼩的80%,由io.sort.spill.percent属性控制),会在本地⽂件系统中创建⼀个溢出⽂件,将该缓冲区中的数据写⼊这个⽂件。
(2)在写⼊磁盘之前,线程⾸先根据reduce任务的数⽬将数据划分为相同数⽬的分区,也就是⼀个reduce任务对应⼀个分区的数据。这样做是为了避免有些reduce任务分配到⼤量数据,⽽有些reduce任务却分到很少数据,甚⾄没有分到数据的尴尬局⾯。其实分区就是对数据进⾏hash的过程。然后对每个分区中的数据进⾏排序,如果此时设置了Combiner,将排序后的结果进⾏Combia操作,这样做的⽬的是让尽可能少的数据写⼊到磁盘。
(3)当map任务输出最后⼀个记录时,可能会有很多的溢出⽂件,这时需要将这些⽂件合并。合并的过程中会不断地进⾏排序和combia操作,⽬的有两个:①尽量减少每次写⼊磁盘的数据量。②尽量减少下⼀复制阶段⽹络传输的数据量。最后合并成了⼀个已分区且已排序的⽂件。为了减少⽹络传输的数据量,这⾥可以将数据压缩,只要将press.map.out设置为true就可以了。
《Mapgis应用》课件
协助航空航天领域的地理数据分析。
Mapgis的数据格式支持
矢量数据格式
支持Shapefile、GeoJSON等 格式。
栅格数据格式
支持Tiff、JPG等格式。
数据库格式
支持Oracle、SQL Server等 格式。
Mapgis的数据编辑功能
1
创建新图层
添加新的地理数据图层。
2
属性编辑
Mapgis的案例分析四:航空航 天应用实例
利用Mapgis进行航空航天领域的地理数据分析和决策支持。
提供多种开发接口和工具,支持定制化的地理信息系统应用。
Mapgis在企业中的应用
市场调研
帮助企业了解市场潜力和竞 争环境。
工作流管理
提高企业运营效率和资源利 用率。
客户关系管理
更好地了解和服务客户。
Mapgis在政府部门中的应用
1 土地规划
优化土地资源利用和 城市发展规划。
2 环境监测
监控污染源和自然保 护区等环境要素。
编辑地理数据的属性信息。
3
几何编辑
修改地理数据的空间几何形状。
Mapgis的数据分析功能
空间分析
研究地理数据之间的关系和 空间模式。
统计分析
探索地理数据的数值特征和 趋势。
网络分析
优化路径规划和资源分配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内容导读: TreeMap类不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap。由TreeMap类实现的Map集合,不允许键对象为null,因为集合中的映射关系是根据键对象按照一定顺序排列的,TreeMap类通
使用TreeMap类
TreeMap 类不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap。由TreeMap类实现的Map集合,不允许键对象为 null,因为集合中的映射关系是根据键对象按照一定顺序排列的,TreeMap类通过实现SortedMap接口得到的方法如下所示。
方法名称 功能简介
comparator() 获得对该集合采用的比较器,返回值为Comparator类型,如果未采用任何比较器则返回null
firstKey() 返回在集合中的排序位于第一位的键对象
lastKey() 返回在集合中的排序位于最后一位的键对象
headMap(K toKey) 截取在集合中的排序位于键对象toKey(不包含)之前的所有映射关系,重新生成
一个SortedMap集合并返 回
subMap(K fromKey, K toKey) 截取在集合中的排序位于键对象fromKey(包含)和toKey(不包含)之间的所有映射关系,
重新生成一个SortedMapJ集合并返回
tailMap(K fromKey) 截取在集合中的排序位于键对象fromKey(包含)之后的所有映射关系,重新生成一个SortedMap
集合并返回
表1 TreeMap类通过实现java.util.SortedMap接口得到的方法
在 添加、删除和定位映射关系上,TreeMap类要比HashMap类的性能差一些,但是其中的映射关系具有一定的顺序,如果不需要一个有序的集合,则建议 使用HashMap类;如果需要进行有序的遍历输出,则建议使用TreeMap类,在这种情况下,可以先使用由HashMap类实现的Map集合,在需要 顺序输出时,再利用现有的HashMap类的实例,创建一个具有完全相同映射关系的TreeMap类型的实例,例如下面的例子。
下面的代码首先利 用HashMap类实现一个Map集合,初始化并遍历;然后再利用TreeMap类实现一个Map集合,初始化并遍历,默认按键对象升序排列;最后再利用 TreeMap类实现一个Map集合,初始化为按键对象降序排列,实现方式为将Collections.reverseOrder()作为构造函数 TreeMap(Comparator c)的入口参数,即与默认排序方式相反,关键代码如下:
src\com\mwq\TestCollection.java关键代码:
public static void main(String[] args) {
Person person1 = new Person("马先生", 220181);
Person person2 = new Person("李先生", 220193);
Person person3 = new Person("王小姐", 2
20186);
Map
……// 由于篇幅有限,此处省略了向集合中添加映射关系的代码
System.out.println("由HashMap类实现的Map集合,无序:");
for (Iterator
Person person = map.get(it.next());
System.out.println(person.getId_card() + " " + person.getName());
}
System.out.println("由TreeMap类实现的Map集合,键对象升序:");
TreeMap
treeMap.putAll(map);
……// 由于篇幅有限,此处省略了遍历集合的代码
System.out.println("由TreeMap类实现的Map集合,键对象降序:");
TreeMap
Collections.reverseOrder());// 初始化为反转排序
treeMap2.putAll(map);
……// 由于篇幅有限,此处省略了遍历集合的代码
}
src\com\mwq\TestCollection.java完整代码:
package com.mwq;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
public class TestCollection {
public static void main(String[] args) {
System.out.println("开始:");
Person person1 = new Person("马先生", 220181);
Person person2 = new Person("李先生", 220193);
Person person3 = new Person("王小姐", 220186);
Map
map.put(person1.getId_card(), person1);
map.put(person2.getId_card(), person2);
map.put(person3.getId_card(), person3);
System.out.println("由HashMap类实现的Map集合,无序:");
for (Iterator
Person person = map.get(it.next());
System.out.println(person.getId_card() + " " + person.getName());
}
System.out.println("由TreeMap类实现的Map集合,键对象升序:");
TreeMap
treeMap.putAll(map);
for (Iterator
Person person = treeMap.get(it.next());
System.out.println(person.getId_card() + " " + person.getName());
}
System.out.println("由TreeMap类实现的Map集合,键对象降序:");
TreeMap
Collections.reverseOrder());// 初始化为反转排序
treeMap2.putAll(map);
for (Iterator it = treeMap2.keySet().iterator(); it.hasNext();) {// 遍例集合
Person person = (Person) treeMap2.get(it.next());
System.out.println(person.getId_card() + " " + person.getName());
}
System.out.println("结束!");