Map接口,hashMap类,TreeMap类,WeakHashMap。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map接口,hashMap类,TreeMap类,WeakHashMap。相关的知识,希望对你有一定的参考价值。
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("zhinangtuan","www.zhinangtuan.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("zhinangtuan","www.zhinangtuan.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("zhinangtuan","www.zhinangtuan.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、zhinangtuan、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("zhinangtuan","www.zhinangtuan.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.zhinangtuan.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、zhinangtuan","www.zhinangtuan.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、zhinangtuan --> www.zhinangtuan.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("zhinangtuan"),new String("www.zhinangtuan.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接口,hashMap类,TreeMap类,WeakHashMap。的主要内容,如果未能解决你的问题,请参考以下文章
Java学习笔记5.4.1 Map接口 - HashMap类