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。的主要内容,如果未能解决你的问题,请参考以下文章

简单比较HashMap和TreeMap

Java基础中map接口和实现类

java---Map接口实现类

Java学习笔记5.4.1 Map接口 - HashMap类

java:容器/集合(Map(HashMap,TreeMap))

Collections+Iterator 接口 | Map+HashMap+HashTable+TreeMap |