- 浏览: 1526935 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。
Map的接口
Map---实现Map
Map.Entry--Map的内部类,描述Map中的按键/数值对。
SortedMap---扩展Map,使按键保持升序排列
关于怎么使用,一般是选择Map的子类
,而不直接用Map类。
下面以HashMap为例。
... {
HashMap hashmap = new HashMap();
hashmap.put( " Item0 " , " Value0 " );
hashmap.put( " Item1 " , " Value1 " );
hashmap.put( " Item2 " , " Value2 " );
hashmap.put( " Item3 " , " Value3 " );
Set set = hashmap.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()
... {
Map.Entry mapentry = (Map.Entry)iterator.next();
System.out.println(mapentry.getkey() + " / " + mapentry.getValue());
}
}
注意,这里Map的按键必须是唯一的,比如说不能有两个按键都为null。
如果用过它,就会知道它的用处了。
资料:
java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map 。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对 (称作“键”和“值”),其中每个键映射到一个值。 从概念上而言,您可以将 List 看作是具有数值键的 Map。 而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。本文将着重介绍核心 Java 发行套件中附带的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。
了解 Map 接口和方法
Java 核心类中有很多预定义的 Map 类。 在介绍具体实现之前,我们先介绍一下 Map 接口本身,以便了解所有实现的共同点。 Map 接口定义了四种类型的方法,每个 Map 都包含这些方法。 下面,我们从两个普通的方法(表 1 )开始对这些方法加以介绍。
表 1: 覆盖的方法。 我们将这 Object 的这两个方法覆盖,以正确比较 Map 对象的等价性。
equals(Object o) | 比较指定对象与此 Map 的等价性 |
hashCode() | 返回此 Map 的哈希码 |
Map 构建
Map 定义了几个用于插入和删除元素的变换方法(表 2 )。
clear() | 从 Map 中删除所有映射 |
remove(Object key) | 从 Map 中删除键和关联的值 |
put(Object key, Object value) | 将指定值与指定键相关联 |
clear() | 从 Map 中删除所有映射 |
putAll(Map t) | 将指定 Map 中的所有映射复制到此 map |
尽管您可能注意到,纵然假设忽略构建一个需要传递给 putAll() 的 Map 的开销,使用 putAll() 通常也并不比使用大量的 put() 调用更有效率,但 putAll() 的存在一点也不稀奇。 这是因为,putAll() 除了迭代 put() 所执行的将每个键值对添加到 Map 的算法以外,还需要迭代所传递的 Map 的元素。 但应注意,putAll() 在添加所有元素之前可以正确调整 Map 的大小,因此如果您未亲自调整 Map 的大小(我们将对此进行简单介绍),则 putAll() 可能比预期的更有效。
查看 Map
迭代 Map 中的元素不存在直接了当的方法。 如果要查询某个 Map 以了解其哪些元素满足特定查询,或如果要迭代其所有元素(无论原因如何),则您首先需要获取该 Map 的“视图”。 有三种可能的视图(参见表 3 )
- 所有键值对 — 参见 entrySet()
- 所有键 — 参见 keySet()
- 所有值 — 参见 values()
前两个视图均返回 Set 对象,第三个视图返回 Collection 对象。 就这两种情况而言,问题到这里并没有结束,这是因为您无法直接迭代 Collection 对象或 Set 对象。要进行迭代,您必须获得一个 Iterator 对象。 因此,要迭代 Map 的元素,必须进行比较烦琐的编码
Iterator keyValuePairs = aMap.entrySet().iterator();Iterator keys = aMap.keySet().iterator();Iterator values = aMap.values().iterator();
值 得注意的是,这些对象(Set、Collection 和 Iterator)实际上是基础 Map 的视图,而不是包含所有元素的副本。 这使它们的使用效率很高。 另一方面,Collection 或 Set 对象的 toArray() 方法却创建包含 Map 所有元素的数组对象,因此除了确实需要使用数组中元素的情形外,其效率并不高。
我运行了一个小测试(随附文件中的 Test1 ),该测试使用了 HashMap,并使用以下两种方法对迭代 Map 元素的开销进行了比较:
int mapsize = aMap.size();Iterator keyValuePairs1 = aMap.entrySet().iterator(); for (int i = 0; i < mapsize; i++){ Map.Entry entry = (Map.Entry) keyValuePairs1.next(); Object key = entry.getKey(); Object value = entry.getValue(); ...}Object[] keyValuePairs2 = aMap.entrySet().toArray(); for (int i = 0; i < rem; i++) {{ Map.Entry entry = (Map.Entry) keyValuePairs2[i]; Object key = entry.getKey();
Profilers in Oracle JDeveloper
Oracle JDeveloper 包含一个嵌入的监测器,它测量内存和执行时间,使您能够快速识别代码中的瓶颈。 我曾使用 Jdeveloper 的执行监测器监测 HashMap 的 containsKey() 和 containsValue() 方法,并很快发现 containsKey() 方法的速度比 containsValue() 方法慢很多(实际上要慢几个数量级!)。 (参见图 1 和图 2 ,以及随附文件中的 Test2 类)。 |
此 测试使用了两种测量方法: 一种是测量迭代元素的时间,另一种测量使用 toArray 调用创建数组的其他开销。 第一种方法(忽略创建数组所需的时间)表明,使用已从 toArray 调用中创建的数组迭代元素的速度要比使用 Iterator 的速度大约快 30%-60%。 但如果将使用 toArray 方法创建数组的开销包含在内,则使用 Iterator 实际上要快 10%-20%。 因此,如果由于某种原因要创建一个集合元素的数组而非迭代这些元素,则应使用该数组迭代元素。 但如果您不需要此中间数组,则不要创建它,而是使用 Iterator 迭代元素。
表 3: 返回视图的 Map 方法: 使用这些方法返回的对象,您可以遍历 Map 的元素,还可以删除 Map 中的元素。
entrySet() | 返回 Map 中所包含映射的 Set 视图。 Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法(还有一个 setValue() 方法)访问后者的键元素和值元素 |
keySet() | 返回 Map 中所包含键的 Set 视图。 删除 Set 中的元素还将删除 Map 中相应的映射(键和值) |
values() | 返回 map 中所包含值的 Collection 视图。 删除 Collection 中的元素还将删除 Map 中相应的映射(键和值) |
访问元素
表 4 中列出了 Map 访问方法。Map 通常适合按键(而非按值)进行访问。 Map 定义中没有规定这肯定是真的,但通常您可以期望这是真的。 例如,您可以期望 containsKey() 方法与 get() 方法一样快。 另一方面,containsValue() 方法很可能需要扫描 Map 中的值,因此它的速度可能比较慢。
表 4: Map 访问和测试方法: 这些方法检索有关 Map 内容的信息但不更改 Map 内容。
get(Object key) | 返回与指定键关联的值 |
containsKey(Object key) | 如果 Map 包含指定键的映射,则返回 true |
containsValue(Object value) | 如果此 Map 将一个或多个键映射到指定值,则返回 true |
isEmpty() | 如果 Map 不包含键-值映射,则返回 true |
size() | 返回 Map 中的键-值映射的数目 |
对使用 containsKey() 和 containsValue() 遍历 HashMap 中所有元素所需时间的测试表明,containsValue() 所需的时间要长很多。 实际上要长几个数量级! (参见图 1 和图 2 ,以及随附文件中的 Test2 )。 因此,如果 containsValue() 是应用程序中的性能问题,它将很快显现出来,并可以通过监测您的应用程序轻松地将其识别。 这种情况下,我相信您能够想出一个有效的替换方法来实现 containsValue() 提供的等效功能。 但如果想不出办法,则一个可行的解决方案是再创建一个 Map,并将第一个 Map 的所有值作为键。 这样,第一个 Map 上的 containsValue() 将成为第二个 Map 上更有效的 containsKey()。
发表评论
-
关于java.util.concurrent必须知道的5件事(一)
2010-08-10 18:34 1435本文原作者:Ted Neward ... -
Java盲点:双重检查锁定及单例模式
2010-06-17 11:11 3658Peter Haggar , 高级软件工程师, IBM 20 ... -
有关可读性
2010-05-13 15:31 1285Long operatorId = ( Long.val ... -
zzJAVA中用于处理字符串的“三兄弟”
2010-04-18 15:42 1124JAVA 中用于处理 字符 ... -
Java中可以使用 break/continue label 语句来控制多重嵌套循环的跳转
2010-04-16 16:40 3642在Java中可以使用 break/conti ... -
JAVA网络编程Socket常见问题 【长连接专题】
2010-03-18 16:30 11119一. 网络程序运行过程中的常见异常及处理 ... -
利用 Eclipse Visual Editor 项目构建 GUI
2010-02-05 13:51 1421一个用于构建图形接口的图形化工具 ... -
学JAVA必须知道:抽象类与接口的区别
2010-01-26 22:08 841abstract class和interface是Java语言 ... -
利 用xml,解析yahoo天气代码(java)
2010-01-06 15:46 5128利 用xml ... -
scanner
2009-12-30 02:32 1191import java.util.Scanner; publ ... -
java从键盘输入一些字符串,并将字符串保存到一个文件中
2009-12-30 02:23 5190import java.io.*; public class ... -
文件的操作。。。行数据封装
2009-12-30 00:43 1157140100171101 太原市公安局特警支队行政处 ... -
java获取当前目录:java中获取当前类所在的目录
2009-12-30 00:19 19062在学习工作中遇到路 ... -
JAVA中MAP的用法
2009-12-29 23:54 11494Map简介 将键映射到值的对象。一个映射不能包含 ... -
演示java中Map容器的常用功能:
2009-12-29 23:53 1884mport java.util.*; ... -
学生信息管理系统V0.2(使用文件存储数据)【MVC模式、DAO模式、Factory模式】
2009-12-07 10:02 21440.2版更新内容: 1.使用文件存储数据; 2.使用Has ... -
接口VS抽象类
2009-12-06 21:19 1180<!-- <rdf:RDF xmlns: ... -
应用java与flex轻松构建cs程序
2009-12-06 13:59 2618今天发现SmartInvoke这一好东西,拿过来与大家分享分享 ... -
JAVA中的equals()和hashCode()方法
2009-12-03 14:03 1081在 Java 语言中, equa ... -
获得系统时间 转换成字符串
2009-11-28 14:27 2873关键字: java 有时候经常用到JAVA 时间转换 如 ...
相关推荐
map文件的主要用途包括: 1. **调试**:开发者可以通过map文件定位代码在内存中的位置,这对于调试内存问题,如段错误或内存泄漏,非常有帮助。 2. **性能优化**:分析map文件可以揭示代码的大小,找出可能的优化点...
7. **层的概念**:TileMap支持多层,每层可以有不同的用途。例如,背景层用于绘制静态环境,中间层放置可互动对象,前景层用于添加装饰或遮挡效果。通过调整层的顺序,可以实现深度效果。 8. **脚本和事件处理**:...
另外,虽然`zip()`函数可以实现类似功能,但它们的用途并不完全相同,`zip()`主要用于将多个序列的元素按位置配对,而`map()`则用于对序列中的每个元素进行相同操作。 总之,Python的`map()`函数提供了一种简洁的...
本文将详细介绍Scala中Map的各种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def++(xs:Map[(A,B)]):Map[A,B]` 该方法用于合并两个Map。如果两个Map中有相同的键,则当前Map中的值会覆盖参数Map中...
10. **插件系统**:通过插件扩展功能,MapEditor可以适应更广泛的用途和定制需求。 在"mir2-mapeditor-master"这个文件名中,我们可以推断这可能是MapEditor的一个针对“mir2”游戏的特定版本或分支,可能是针对...
这些功能可以通过阅读源码来了解其具体的实现方式和用途。 接着,Map是ES6中新增的一种数据结构,它解决了数组不能以任意对象作为键的问题。在Map中,任何值(对象或者原始类型)都可以作为键或值。与数组不同,Map...
- **用途**:`vector`适合顺序存取和批量操作,`map`适用于关联数据和快速查找。 **四、使用技巧** - 当需要快速访问和修改元素,且元素位置固定时,选择`vector`。 - 当需保持元素有序,或根据键进行查找时,选择`...
在实际应用中,Map的一个常见用途是在遍历数据时保持顺序。不同于对象,Map中的元素会按照插入的顺序进行迭代。例如,在实现一个缓存系统时,可以使用Map来存储最近访问的项目,并保持它们的访问顺序。 此外,Map...
每个`Map`实现都有其特定的特性和用途: 1. **HashMap**:基于哈希表实现,插入和查询操作通常具有O(1)的时间复杂度,但不保证元素顺序。 2. **TreeMap**:基于红黑树实现,保持键的自然排序或自定义排序,插入和...
对于c++程序来说 map的使用无处不在。影响程序性能的瓶颈也往往是map的性能。尤其在大数据情况下,以及业务关联紧密而无法实现数据分发和并行处理的情况。...声明:该代码不能用于商业用途,只能用于科学研究。
1. **地图数据格式**:MapServer支持多种地图数据格式,如Shapefile、PostGIS、GeoJSON、GDAL/OGR等,理解这些数据格式的特性和用途是构建地图服务的基础。 2. **地图投影**:地理空间数据的投影转换是MapServer中...
Map集合的这些实现类在不同的场景下具有不同的性能特点和用途。例如,HashMap在大多数情况下使用,因为它提供了最快的查找性能;TreeMap用于当你需要按键排序的时候;而ConcurrentHashMap则用于高度并发的环境。了解...
4. **MapObject对象模型**:讲解MapObject的核心对象,如IMap、ILayer、IFeatureClass、IFeature等,以及它们之间的关系和用途。 5. **地图操作**:如何创建和管理地图,包括添加图层、调整比例尺、缩放和平移地图...
在Java中,Map有多种实现类,每种实现类有不同的特性和用途。本篇文章将详细探讨`HashMap`, `LinkedHashMap`, `TreeMap`, 和 `Hashtable`这四个常见的Map实现类,特别是它们如何处理排序的问题。 首先,`HashMap`是...
MAP信令包含多种消息类型,如“位置更新请求”、“位置更新接受”、“呼叫建立请求”、“呼叫建立确认”等,每种消息都有特定的用途和流程。 **5. MAP与其它协议的关系** - **SS7协议栈**:MAP位于SS7的TCAP(事务...
标签为空,而部分内容展示的是一系列的文件名,包括截图和一个名为 "jdevice_id_map.bat" 的批处理文件,但没有提供这些文件的详细内容或用途。批处理文件(.bat)在Windows操作系统中通常用于执行一系列命令,但...
Java提供了多种Map接口的实现,如HashMap、TreeMap、LinkedHashMap等,它们各有不同的特性和用途。 二、二级联动概念 二级联动是指在两个下拉框或者选择器之间存在依赖关系,即选择其中一个下拉框的某个选项后,另...
综上所述,"tilemap资源"涵盖了各种类型和风格的图块,可用于构建不同类型的2D地图,这些资源在游戏开发、模拟和图形设计中具有广泛的用途。理解和掌握Tilemap的原理和实践技巧对于提升项目效率和质量至关重要。
尤其要注意的是,商业用途可能需要申请许可证,未经许可的非法使用可能会导致法律纠纷。因此,在开发过程中,确保了解并遵守高德地图的API使用政策。 在“高德云图非法”这个标签中,可能是指用户在未授权的情况下...
对于个人或非商业用途,这些限制可能并不构成问题。然而,对于专业或大规模的GIS项目,购买官方授权的完整版软件无疑是更安全且合法的选择。 安装程序"Map2ShpPro5_Setup.exe"表明这是Map2ShpPro的第五个版本的...