• Map接口,Map.Entry,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.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());   
    }   

    可以结合以下链接学习一下:

    IdentityHashMap类:增加相同Key(键)内容的结果

    SortedMap接口:进行排序操作。

     
     
  • 相关阅读:
    微信小程序开发 —— 一些小的注意点
    C# —— 继承
    JavaScript —— 判断一个对象是否为空
    SQLServer——事务
    创建存储过程
    (转)从开发小白到音视频专家
    (转载)从零开始学习音视频编程技术(一) 视频格式讲解
    (转载)如何正确的阅读FFmpeg官网提供的资料
    (转载)音频编解码基础(wav/aac/pcma/pcmu)
    (转载)语音编解码过程概述
  • 原文地址:https://www.cnblogs.com/alsf/p/6227888.html
Copyright © 2020-2023  润新知