Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的。
定义:
public interface Map<K,V>
Map.Entry接口。
定义:
public static interface Map.Entry<K,V>
常用方法:
Map与Map.Entry关系:
常用子类:
以HashMap为例说明基本操作方法:put()增加内容,get()取出内容。
根据键取出内容。 map.get("key")。
package 类集;
import java.util.HashMap;
import java.util.Map;
public class test1{
public static void main(String args[]){
Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
map = new HashMap<String,String>() ;
map.put("mldn","www.mldn.cn") ; // 增加内容
map.put("*ngtuan","www.*ngtuan.net.cn") ; // 增加内容
map.put("mldnjava","www.mldnjava.cn") ; // 增加内容
String val = map.get("mldn") ; // 根据key取出值
System.out.println("取出的内容是:" + val) ; }
};
输出结果:
取出的内容是:www.mldn.cn
也可以通过contains.Xxx()方法判断指定的key或者values是否存在。
package 类集;
import java.util.HashMap;
import java.util.Map;
public class test1{
public static void main(String args[]){
Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
map = new HashMap<String,String>() ;
map.put("mldn","www.mldn.cn") ; // 增加内容
map.put("*ngtuan","www.*ngtuan.net.cn") ; // 增加内容
map.put("mldnjava","www.mldnjava.cn") ; // 增加内容
if(map.containsKey("mldn")){ // 判断key是否存在
System.out.println("搜索的key存在!") ;
}else{
System.out.println("搜索的key不存在!") ;
}
if(map.containsValue("www.mldn.cn")){ // 判断value是否存在
System.out.println("搜索的value存在!") ;
}else{
System.out.println("搜索的value不存在!") ;
}
}
};
如果想输出全部的key,注意,不包含Values,则使用如下方法:
Set<K> KeySet()。
例子如下:
package 类集;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
public class test1{
public static void main(String args[]){
Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
map = new HashMap<String,String>() ;
map.put("mldn","www.mldn.cn") ; // 增加内容
map.put("*ngtuan","www.*ngtuan.net.cn") ; // 增加内容
map.put("mldnjava","www.mldnjava.cn") ; // 增加内容
Set<String> keys = map.keySet() ; // 得到全部的key
Iterator<String> iter = keys.iterator() ;
while(iter.hasNext()){
String str = iter.next() ;
System.out.print(str + "、") ;
}
}
};
输出结果:
mldn、*ngtuan、mldnjava、
既然可以得到全部的key,那么也能得到所有的value.通过方法values().
定义如下:
Collection<V> Values()
实例:
package 类集;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
public class test1{
public static void main(String args[]){
Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
map = new HashMap<String,String>() ;
map.put("mldn","www.mldn.cn") ; // 增加内容
map.put("*ngtuan","www.*ngtuan.net.cn") ; // 增加内容
map.put("mldnjava","www.mldnjava.cn") ; // 增加内容
Collection<String> values = map.values() ; // 得到全部的value
Iterator<String> iter = values.iterator() ;
while(iter.hasNext()){
String str = iter.next() ;
System.out.print(str + "、") ;
}
}
};
输出:
www.mldn.cn、www.*ngtuan.net.cn、www.mldnjava.cn、
在Map中还存在TreeMap的子类,以Key排序。
package 类集;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
public class test1{
public static void main(String args[]){
Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
map = new TreeMap<String,String>() ;
map.put("A、mldn","www.mldn.cn") ; // 增加内容
map.put("C、*ngtuan","www.*ngtuan.net.cn") ; // 增加内容
map.put("B、mldnjava","www.mldnjava.cn") ; // 增加内容
Set<String> keys = map.keySet() ; // 得到全部的key
Iterator<String> iter = keys.iterator() ;
while(iter.hasNext()){
String str = iter.next() ;
System.out.println(str + " --> " + map.get(str)) ; // 取出内容
}
}
};
输出结果:
A、mldn --> www.mldn.cn
B、mldnjava --> www.mldnjava.cn
C、*ngtuan --> www.*ngtuan.net.cn
会发现,以上把得到的Map的key全部得到,取出来后,一个个输出,发现输出第二和第三的顺序与输入Map的不一样,变化了,
这表明,TreeMap把输入的内容,按照key排序了。
使用treemap可以方便的完成排序的操作。
如果自定义的类要想作为key的话,则肯定要实现comparable接口,指定比较的规则。
弱引用类:WeakHashMap,system.gc()
如果假设Map中某些内容长时间不使用,之前做法是不会自动删除的,如果希望其自动删除,可使用弱引用类。当内容不需要的时候,会自动删除。
package 类集;
import java.util.Map;
import java.util.WeakHashMap;
public class test1{
public static void main(String args[]){
Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
map = new WeakHashMap<String,String>() ;
map.put(new String("mldn"),new String("www.mldn.cn")) ;
map.put(new String("*ngtuan"),new String("www.*ngtuan.net.cn")) ;
map.put(new String("mldnjava"),new String("www.mldnjava.cn")) ;
System.gc() ; // 强制性进行垃圾的收集操作
map.put(new String("lxh"),new String("lixinghua")) ;
System.out.println(map) ;
}
};
输出结果:
{lxh=lixinghua}
发现GC()之前的内容都被删除了。
上面没有关于Map.Entry的相关代码,重新找了点文章。如下:
Map是java中的接口,Map.Entry是Map的一个内部接口,
Map提供了一些常用方法,如keySet()、entrySet()等方法。
keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
map.put("3", 3);
Iterator itor=map.entrySet().iterator();
while(itor.hasNext()){
Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)itor.next();
System.out.println("key="+entry.getKey().toString());
System.out.println("values="+entry.getValue().toString());
}
可以结合以下链接学习一下: