java的map
Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。
这里有详细的论述http://www.oracle.com/technetwork/cn/articles/maps1-100947-zhs.html
map.put("x","y");
map.get("x") == y
就是一一映射关系,每个key对应一个value 知道了key也就知道了value
对于键对象来说,像Set 一样,一个Map容器中的键对象不允许重复,为了保持查找结果的一致性;如果有两个键对象一样,键对象对应的值对象时就无法确定了,造成混乱,所以键的唯一性很重要。当然在使用过程中,某个键所对应的值对象可能会发生变 化,这时会按照最后一次修改的值对象与键对应。
值对象没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过使用上可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。
Map有两种比较常用的实现:HashMap和TreeMap,WeakMap。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
HashMap 用哈希码快速定位一个键,但是元素存储无序。注意:其put()函数支持null,而如果原位置上有值,则替换为新值后,并返回旧值。其返回过程确定的位置正是get()函数的实现。参见http://blog.csdn.net/longshenlmj/article/details/17077869
而TreeMap则是对键按序存放,因此有扩展的方法,比如firstKey(),lastKey() 等,你还可以从TreeMap中指定一个范围以取得其子Map。
键和值的关联很简单,用put(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象,WeakMap这个用于内存自动释放的。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
官方的非官方的Map事先有好几百个(hibernate、spring、apache等都有实现)。官方的主要用到的就三大类:HashMap(最常见的,内部无序的)、TreeMap(排过序的)及WeakMap(这个用于内存自动释放的);还有一类是多线程时使用的并发Map。
如需查看具体Map子类。装个Eclipse,ctrl+shit+t输入Map后,在Map的class名那里按ctrl+T可以查看到Map所有的实现类。
使用时,都用HasMap等实现Map接口的类
创建:Map<String,String> map = new HashMap<String,String>();
插入元素:map.put("1","a");
移除元素: map.remove("1");
清空: map.clear();
Map map=new HashMap();
map.put("name","张三");
System.out.print((String)map.get("name"));
循环输出映射:
while(itr.hasNext()){
String key=(String)itr.next();
String value=(String)map.get(key);
System.out.println("key=="+key+",value=="+value);
}
输出还有其它用法:把map看成一个Map.Entry的Set,那么每个Map.Entry就是一个键--值对,遍历这个Set,直接从中获取key和value。
Map map = new HashMap();
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println(“key”+key+“:value”+value);
}
其中,中间生成一个set
// Get a set of the entries
Set set = map.entrySet();
// Get an iterator
Iterator i = set.iterator();
// Display elements
JDK1.5中,应用新特性For-Each循环:
Map m = new HashMap();
for(Object o : map.keySet()){
map.get(o);
}
返回的 set 中的每个元素都是一个 Map.Entry 类型。
private Hashtable<String, String> emails = new Hashtable<String, String>();
//方法一: 用entrySet()
Iterator it = emails.entrySet().iterator();
while(it.hasNext()){
Map.Entry m=(Map.Entry)it.next();
logger.info("email-" + m.getKey() + ":" + m.getValue());
}
// 方法二:jdk1.5支持,用entrySet()和For-Each循环()
for (Map.Entry<String, String> m : emails.entrySet()) {
logger.info("email-" + m.getKey() + ":" + m.getValue());
}
// 方法三:用keySet()
Iterator it = emails.keySet().iterator();
while (it.hasNext()){
String key;
key=(String)it.next();
logger.info("email-" + key + ":" + emails.get(key));
}
// 方法五:jdk1.5支持,用keySEt()和For-Each循环
for(Object m: emails.keySet()){
logger.info("email-" + m+ ":" + emails.get(m));
}
另外 我们可以先把hashMap 转为集合Collection,再迭代输出,不过得到的对象
Map aa = new HashMap();
aa.put("tmp1", new Object()); //追加 替换用同样的函数.
aa.remove("temp1"); //删除
for (Iterator i = aa.values().iterator(); i.hasNext(); ) {
Object temp = i.next();
} //遍历
例子,包含TreeSet的元素内部排序的
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
HashMap<Object,Object> hash = new HashMap<Object,Object>();
TreeMap<Object,Object> treeMap = new TreeMap<Object,Object>();
list.add("a");
list.add("b");
list.add("c");
hash.put(3, 3);
hash.put(4, 4);
hash.put(5, 5);
hash.put(6, 6);
hash.put(1, 1);
hash.put(2, 2);
treeMap.put(1, 1);
treeMap.put(2, 2);
treeMap.put(3, 3);
treeMap.put(4, 4);
treeMap.put(5, 5);
treeMap.put(6, 6);
//list遍历
for(String m: list){
System.out.println(m);
}
// hashmap entrySet() 遍历
for(Map.Entry<Object,Object> m: hash.entrySet()){
System.out.println(m.getKey()+"---"+m.getValue());
}
//hashmap keySet() 遍历
for(Object m: hash.keySet()){
System.out.println(m+"---"+hash.get(m));
}
// treemap keySet()遍历
for(Object m: treeMap.keySet()){
System.out.println(m+"---"+treeMap.get(m));
}
}
java的map的更多相关文章
- 错误:java.util.Map is an interface, and JAXB can't handle interfaces.
问题: 在整合spring+cxf时报错java.util.Map is an interface, and JAXB can't handle interfaces. 解决方法: 将服务端的serv ...
- Java中Map常用方法总结以及遍历方式的汇总
一.整理: 看到array,就要想到角标. 看到link,就要想到first,last. 看到hash,就要想到hashCode,equals. 看到tree,就要想到两个接口.Comparable, ...
- Java 基础 Map 练习题
第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...
- java 遍历map 方法 集合 五种的方法
package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...
- JAVA/Android Map与String的转换方法
在Android开发中 Map与String的转换在,在一些需求中经常用到,使用net.sf.json.JSONObject.fromObject可以方便的将string转为Map.但需要导入jar包 ...
- java中map插入相同的key
测试用例: package test; import org.junit.Test; import po.Person; import java.util.HashMap; import java.u ...
- JAVA ,Map接口 ,迭代器Iterator
1. Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...
- jmap命令(Java Memory Map)(转)
JDK内置工具使用 一.javah命令(C Header and Stub File Generator) 二.jps命令(Java Virtual Machine Process Status To ...
- Java遍历Map的3种方式
package test; import java.util.Collection; import java.util.HashMap; import java.util.Map; import ja ...
- 【Java】Map杂谈,hashcode()、equals()、HashMap、TreeMap、LinkedHashMap、ConcurrentHashMap
参考的优秀文章: <Java编程思想>第四版 <Effective Java>第二版 Map接口是映射表的结构,维护键对象与值对象的对应关系,称键值对. > hashco ...
随机推荐
- 模块机制 之commonJs、node模块 、AMD、CMD
在其他高级语言中,都有模块中这个概念,比如java的类文件,PHP有include何require机制,JS一开始就没有模块这个概念,起初,js通过<script>标签引入代码的方式显得杂 ...
- C# 获取当前屏幕DPI
1.通过Graphics类获取 Graphics currentGraphics = Graphics.FromHwnd(new WindowInteropHelper(mainWindow).Han ...
- vmware 12中安装MAC OS X Lion 10.7
下载并安装vmware. 下载并安装MAC补丁. 创建虚拟机. 设置ISO文件. 开启虚拟机. 安装vmware tools. 1. 下载并安装vmware.我是直接在腾 ...
- 疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN
定义Model: from django.db import models class Moreinfo(models.Model): weight = models.FloatField() hei ...
- nginx 日志分析工具goaccess
参考:https://www.goaccess.io/download 安装 $ wget http://tar.goaccess.io/goaccess-1.1.1.tar.gz $ tar -xz ...
- RDO Stack Exception: UnboundLocalError: local variable 'logFile' referenced before assignment
Issue: When you install RDO stack on CentOS, you may encounter following error. Error: [root@localho ...
- RxJava(十一)defer操作符实现代码支持链式调用
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52597643 本文出自:[余志强的博客] 一.前言 现在越来越多An ...
- EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源
通过注解方式注入并使用其他EJB或者服务 真实项目EJB对象很多,EJB之间也可以互相调用, 在项目HelloWorld下新建接口Other在cn.hqu.ejb3下: public interfac ...
- time,gettimeofday,clock_gettime
time()提供了秒级的精确度 1.头文件 <time.h> 2.函数原型 time_t time(time_t * timer) 函数返回从UTC1970-1-1 0:0:0开始到现在的 ...
- 关于查找iOS中App路径时所要注意的一个问题
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...