java 基础之Map用法
2016-08-03 15:47
162 查看
参考自:http://chenxiuheng.iteye.com/blog/996385
http://www.cnblogs.com/kristain/articles/2033566.html
一、java 声明静态Map常量的简单方式
1、常用的声明方式(使用静态代码块):
public final static Map map = new HashMap();
static {
map.put("key1", "value1");
map.put("key2", "value2");
}
2、一种简约的方式:
public final static Map map = new
HashMap() {{
put("key1", "value1");
put("key2", "value2");
}};
这种方式,相当于重载HashMap的一个匿名实现。向原有的HashMap中添加了一个匿名构造方法。
二、取出 Map中key和value的值
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "v1");
map.put("2", "v2");
for (String key : map.keySet()) {
System.out.println("key= " + key + " and value= " + map.get(key));
}
}
三、遍历Map的四种方法
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
//第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第三种:推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
四、map中不能使用基本数据类型,map转int
emp.put(1,
"123"); 这个是自动装箱了,相当于emp.put(new Integer(1), "123"); Map emp = new HashMap();创建的是<Object,Object> ,Map中不能使用基本类型的
map转int:Map<String,Integer>
map = new HashMap<String,Integer>();
如果你的Map是Map<String, Integer>的话,且装入的是int值的话,下面这样就可以,1.5之后的Java支持自动装箱/拆箱
int i = map.get("xxx");
五、HashMap、Hashtable、LinkedHashMap、TreeMap
4000
一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.
HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。
HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。
在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。
当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。
http://www.cnblogs.com/kristain/articles/2033566.html
一、java 声明静态Map常量的简单方式
1、常用的声明方式(使用静态代码块):
public final static Map map = new HashMap();
static {
map.put("key1", "value1");
map.put("key2", "value2");
}
2、一种简约的方式:
public final static Map map = new
HashMap() {{
put("key1", "value1");
put("key2", "value2");
}};
这种方式,相当于重载HashMap的一个匿名实现。向原有的HashMap中添加了一个匿名构造方法。
二、取出 Map中key和value的值
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "v1");
map.put("2", "v2");
for (String key : map.keySet()) {
System.out.println("key= " + key + " and value= " + map.get(key));
}
}
三、遍历Map的四种方法
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
//第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第三种:推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
四、map中不能使用基本数据类型,map转int
emp.put(1,
"123"); 这个是自动装箱了,相当于emp.put(new Integer(1), "123"); Map emp = new HashMap();创建的是<Object,Object> ,Map中不能使用基本类型的
map转int:Map<String,Integer>
map = new HashMap<String,Integer>();
如果你的Map是Map<String, Integer>的话,且装入的是int值的话,下面这样就可以,1.5之后的Java支持自动装箱/拆箱
int i = map.get("xxx");
五、HashMap、Hashtable、LinkedHashMap、TreeMap
4000
一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.
HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。
HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。
在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。
当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android Google Map获取地理位置信息的方法
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- Spark RDD API详解(一) Map和Reduce
- PropertyChangeListener简单理解
- c语言实现hashmap(转载)
- Python中map()函数浅析
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器