java中Map常见用法
2017-12-01 18:17
423 查看
Map接口的用法
集合中Collection、Set、List接口都属于单值操作,即每次只能操作一个对象;Map与他们不同的是,每次操作的是一对对象,即二次偶对象,每个元素都以key-value的形式存储在集合中。
1、Map接口定义:
public interface Map<K,V>:在Map上应用了泛型,必须同时设置好key和value的类型,其中Map中每一对key-value表示一个值。
2、Map.Entry接口:
Map.Entry是Map内部定义的一个接口,用来保存key->value的内容。定义如下:
Public static interface Map.Entry<K,V>:Map.Entry使用static关键字声明的内部接口,此接口可以由外部通过“外部类.内部类”的形式直接调用。该接口常用方法如下:
集合中,实际上是将key-value的数据保存在Map.Entry的实例之后,再在Map集合中插入的是一个Map.Entry的实例化对象。注意,在一般的Map操作中(例如,增加或取出数据等操作)不用管Map.Entry接口,但是将Map中的数据全部输出时就必须使用Map.Entry接口。
3、Map接口常用子类:
HashMap:无序存放,新的操作类,key不允许重复。
Hashtable:无序存放,旧的操作类,key不允许重复。
TreeMap:有顺序,按集合中的key排序,key不允许重复。
WeakHashMap:弱引用的Map集合,当集合中的某些内容不再使用时清除无用的数据,使用gc进行回收。
IdentityHashMap:key可以重复的Map集合。
* HashMap,本身是Map的子类,直接使用此类为Map接口实例化即可。相关实例,例如向集合中增加和取出内容。
package bugtree;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public
classdemo{
public
staticvoidmain(String
args[]) {
Map<String,
String> map=new HashMap<String,
String>();//实例化一个HashMap对象
map.put("baidu","https://www.baidu.com/");//增加内容
map.put("360",
"https://www.360.cn/");//增加内容
map.put("souhu","http://www.sohu.com/");//增加内容
4000
//根据key取出value
String
var1=map.get("baidu");
System.out.println("取出的内容是:"+var1);//输出Map
//判断指定的key或value是否存在
if (map.containsKey("baidu")){
//判断指定的key是否存在
System.out.println("搜索的key存在");
}else {
System.out.println("搜索的key不存在");
}
if (map.containsValue("https://www.360.cn/")){
//判断指定的value是否存在
System.out.println("搜索的value存在");
}else {
System.out.println("搜索的value不存在");
}
//输出全部的key
Set<String>
keys=map.keySet();//得到全部的key
Iterator<String>
iter=keys.iterator();//实例化Iterator
System.out.println("全部的key");
while(iter.hasNext()) {
//迭代输出全部的key
String
str=iter.next();
//取出集合的key
System.out.println(str+"、");
}
//取出全部的value
Collection<String>
values=map.values();//得到全部的value
Iterator<String>
iter1=values.iterator();//实例化Iterator
System.out.println("全部的value:");
while (iter1.hasNext()) {
String
str=iter1.next();//取出value
System.out.println(str+"、");
}
}
}
*Hashtable:HashMap和Hashtable在操作上没有大的区别,但是有各自的特点:
*TreeMap:主要功能是按key排序,案例如下:
package bugtree;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public
classdemo{
public
staticvoidmain(String
args[]) {
Map<String,
String> map=new TreeMap<String,
String>();//实例化一个TreeMap对象
map.put("baidu","https://www.baidu.com/");//增加内容
map.put("360",
"https://www.360.cn/");//增加内容
map.put("souhu","http://www.sohu.com/");//增加内容
Set<String>keys=map.keySet();
Iterator<String>iter=keys.iterator();
while(iter.hasNext()){
//迭代输出
String
str=iter.next();
System.out.println(str+"--》"+map.get(str));
}
}
}
*WeakHashMap:之前讲解的Map子类中的数据都是使用强引用保存的,即里面的内容不管是否使用都始终在集合中保留,如果希望集合自动清理暂时不用的数据就使用WeakHashMap类。这样,当进行垃圾收集时会释放掉集合中的垃圾信息。
package bugtree;
import java.util.Map;
import java.util.WeakHashMap;
public
classdemo{
public
staticvoidmain(String
args[]){
Map<String,String> map;
map=newWeakHashMap<String,String>();//实例化一个Map对象
map.put(new String("baidu"),newString("https://www.baidu.com/"));//增加内容
map.put(new String("360"),
new String("https://www.360.cn/"));//增加内容
System.gc();
map.put(new String("souhu"),newString("http://www.sohu.com/"));//增加内容
System.out.println("内容:"+map);
}
}
*IdentityHashMap:key可以重复的Map集合,HashMap操作重复的key值会覆盖之前的内容,但是IdentityHashMap不会覆盖。
packagebugtree;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import javax.print.attribute.standard.Media;
public
classdemo{
public
staticvoidmain(String
args[]){
Map<String,String> map;
map=new IdentityHashMap<String,String>();//实例化一个Map对象
map.put(new String("baidu"),newString("https://www.baidu.com/"));//增加内容
map.put(new String("baidu"),newString("https://www.baidu.com/"));//增加内容
map.put(new String("souhu"),newString("http://www.sohu.com/"));//增加内容
Set<Map.Entry<String,String>> allSet=null;
allSet=map.entrySet();
Iterator<Map.Entry<String,String>>
iter=null;//声明Iterator
iter=allSet.iterator();
while (iter.hasNext()) {
Map.Entry<String,String> w=iter.next();
System.out.println(w.getKey()+"-->"+w.getValue());
}
}
}
*
集合中Collection、Set、List接口都属于单值操作,即每次只能操作一个对象;Map与他们不同的是,每次操作的是一对对象,即二次偶对象,每个元素都以key-value的形式存储在集合中。
1、Map接口定义:
public interface Map<K,V>:在Map上应用了泛型,必须同时设置好key和value的类型,其中Map中每一对key-value表示一个值。
2、Map.Entry接口:
Map.Entry是Map内部定义的一个接口,用来保存key->value的内容。定义如下:
Public static interface Map.Entry<K,V>:Map.Entry使用static关键字声明的内部接口,此接口可以由外部通过“外部类.内部类”的形式直接调用。该接口常用方法如下:
方法 | 类型 | 描述 |
public Boolean equals(Object o) | 普通 | 对象比较 |
public K getKey() | 普通 | 取得key |
public V getValue() | 普通 | 取得value |
public int hashCode() | 普通 | 返回哈希码 |
public V setValue(V value) | 普通 | 设置value的值 |
3、Map接口常用子类:
HashMap:无序存放,新的操作类,key不允许重复。
Hashtable:无序存放,旧的操作类,key不允许重复。
TreeMap:有顺序,按集合中的key排序,key不允许重复。
WeakHashMap:弱引用的Map集合,当集合中的某些内容不再使用时清除无用的数据,使用gc进行回收。
IdentityHashMap:key可以重复的Map集合。
* HashMap,本身是Map的子类,直接使用此类为Map接口实例化即可。相关实例,例如向集合中增加和取出内容。
package bugtree;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public
classdemo{
public
staticvoidmain(String
args[]) {
Map<String,
String> map=new HashMap<String,
String>();//实例化一个HashMap对象
map.put("baidu","https://www.baidu.com/");//增加内容
map.put("360",
"https://www.360.cn/");//增加内容
map.put("souhu","http://www.sohu.com/");//增加内容
4000
//根据key取出value
String
var1=map.get("baidu");
System.out.println("取出的内容是:"+var1);//输出Map
//判断指定的key或value是否存在
if (map.containsKey("baidu")){
//判断指定的key是否存在
System.out.println("搜索的key存在");
}else {
System.out.println("搜索的key不存在");
}
if (map.containsValue("https://www.360.cn/")){
//判断指定的value是否存在
System.out.println("搜索的value存在");
}else {
System.out.println("搜索的value不存在");
}
//输出全部的key
Set<String>
keys=map.keySet();//得到全部的key
Iterator<String>
iter=keys.iterator();//实例化Iterator
System.out.println("全部的key");
while(iter.hasNext()) {
//迭代输出全部的key
String
str=iter.next();
//取出集合的key
System.out.println(str+"、");
}
//取出全部的value
Collection<String>
values=map.values();//得到全部的value
Iterator<String>
iter1=values.iterator();//实例化Iterator
System.out.println("全部的value:");
while (iter1.hasNext()) {
String
str=iter1.next();//取出value
System.out.println(str+"、");
}
}
}
*Hashtable:HashMap和Hashtable在操作上没有大的区别,但是有各自的特点:
序号 | 比较点 | HashMap | Hashtable |
1 | 推出时间 | JDK1.2之后推出的,属于新的操作类 | JDK1.1推出 |
2 | 性能 | 采用异步处理方式,性能更高 | 采用同步,性能较低 |
3 | 线程安全 | 属于非线程安全的操作类 | 属于线程安全的操作类 |
package bugtree;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public
classdemo{
public
staticvoidmain(String
args[]) {
Map<String,
String> map=new TreeMap<String,
String>();//实例化一个TreeMap对象
map.put("baidu","https://www.baidu.com/");//增加内容
map.put("360",
"https://www.360.cn/");//增加内容
map.put("souhu","http://www.sohu.com/");//增加内容
Set<String>keys=map.keySet();
Iterator<String>iter=keys.iterator();
while(iter.hasNext()){
//迭代输出
String
str=iter.next();
System.out.println(str+"--》"+map.get(str));
}
}
}
*WeakHashMap:之前讲解的Map子类中的数据都是使用强引用保存的,即里面的内容不管是否使用都始终在集合中保留,如果希望集合自动清理暂时不用的数据就使用WeakHashMap类。这样,当进行垃圾收集时会释放掉集合中的垃圾信息。
package bugtree;
import java.util.Map;
import java.util.WeakHashMap;
public
classdemo{
public
staticvoidmain(String
args[]){
Map<String,String> map;
map=newWeakHashMap<String,String>();//实例化一个Map对象
map.put(new String("baidu"),newString("https://www.baidu.com/"));//增加内容
map.put(new String("360"),
new String("https://www.360.cn/"));//增加内容
System.gc();
map.put(new String("souhu"),newString("http://www.sohu.com/"));//增加内容
System.out.println("内容:"+map);
}
}
*IdentityHashMap:key可以重复的Map集合,HashMap操作重复的key值会覆盖之前的内容,但是IdentityHashMap不会覆盖。
packagebugtree;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import javax.print.attribute.standard.Media;
public
classdemo{
public
staticvoidmain(String
args[]){
Map<String,String> map;
map=new IdentityHashMap<String,String>();//实例化一个Map对象
map.put(new String("baidu"),newString("https://www.baidu.com/"));//增加内容
map.put(new String("baidu"),newString("https://www.baidu.com/"));//增加内容
map.put(new String("souhu"),newString("http://www.sohu.com/"));//增加内容
Set<Map.Entry<String,String>> allSet=null;
allSet=map.entrySet();
Iterator<Map.Entry<String,String>>
iter=null;//声明Iterator
iter=allSet.iterator();
while (iter.hasNext()) {
Map.Entry<String,String> w=iter.next();
System.out.println(w.getKey()+"-->"+w.getValue());
}
}
}
*
相关文章推荐
- Java实现Map集合遍历的四种常见方式与用法分析
- JAVA中MAP的四种类型区别和常见的简单用法
- java深度探究---Map常见用法,遍历
- Java Map用法
- 浅谈java中Map的用法
- Java中Map的用法详解
- Java操作MongoDB2.6的常见API用法
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
- Java 枚举7常见种用法
- 【转】Java 枚举7常见种用法
- Java枚举(enum)七种常见的用法
- ACM常见高精度总结(java用法)
- Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法
- java中遍历Map的几种常见方式
- C++ Map常见用法说明
- map常见用法
- Java 枚举7常见种用法
- java枚举类的常见用法
- Java map 详解 - 用法、遍历、排序、常用API等
- java JsonObject的用法以及map总同一个key,但是不同的value,如何存储的问题