zoukankan      html  css  js  c++  java
  • Map接口之HashMap,LinkedHashMap,TreeMap

    Map与Collection 并列存在,用于保存具有映射关系的数据:Key-Value

    Map中的Key和Value都可以是任何引用类型的数据

    Map中的Key用Set存放,不允许重复,即同一个Map对象所对应的类,须重写HashCode()和equals()方法

    常用String类作为Map的 "键"

    Key和vlaue之间存在单项一对一关系,即通过指定的Key总能找到唯一的,确定的value

    TestMap

    package com.aff.coll;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Collection;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    import java.util.TreeMap;
    
    import org.junit.Test;
    
    /*
     Collection接口
     
     Map接口
                |----HashMap:Map的主要实现类
                |----LinkedHashMap:使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
                |----TreeMap: 按照添加进Map中的元素的 key 的指定属性进行排序,要求key必须是同一个类对象
                                           自动排序 vs 定制排序
                |----Hashtable  :①古老的Map实现类,线程安全,不允许使用null作为key和value
                                            ②和HashMap一样不能保证其中key-value对的顺序 
                                            ③判断两个key相等,两个value相等的标准和HashMap一致     
                                            ④太古老,标识符的table还是小写的,不建议使用
                                    |---- Properties :常用来处理属性文件。键和值都为String类型的
     */
    public class TestMap {
        //使用Properties处理属性文件
        @Test
        public void testProperties() throws FileNotFoundException, IOException{
            Properties pros =  new Properties();
            pros.load(new FileInputStream(new File("jdbc.properties")));
            String user = pros.getProperty("user");
            System.out.println(user);//root;
            String password = pros.getProperty("password");
            System.out.println(password);//123ab;
        }
        
        
    /*     Map常用方法:
            Object put(Objet key,Object value);  向Map中添加一个元素
             Object remove(Object key); 按照指定的key删除此key-value
             void putAll(Map t);
             void clear();  清空
             
             Object get(Object key);  获取指定key的value值,若无此key,则返回null
             
             boolean ontainsKey(Object key);
             boolean containsValue(Object value);
             int size();  返回集合的长度
             boolean isEmpty();
             boolean equals(Object obj);
             */
        
        
        //HashMap
    /*    
        1.HashMap :key使用Set来存放的,不可重复,Value是用collection来存放的,
                   可重复的一个key-value对,是一个Entry.所有的Entry是用Set存放的,也是不可重复的。
        2.向HashMap中添加元素时,会调用key所在的类的equals()方法,判断两个key是否相同,
          若相同,则只能添加进后添加的那个元素
         */
        @Test
        public void testHashMap() {
         Map map =  new HashMap();
         map.put("AA", 12);
         map.put("BB", 143);
         map.put("BB", 4656);
         map.put(123, "VV");
         map.put(null, null);
         System.out.println(map.size());//4
        }
        
        
        //遍历Map
        @Test
        public void testHashMap2() {
    /*        
            如何遍历Map
            Set  KeySet();
            Collection values();
            Set entrySet();
            */
            Map map =  new HashMap();
            map.put("AA", 12);
            map.put("BB", 143);
            map.put(123, "VV");
            map.put(null, null);
            map.put(new Person("DD", 23), 46);
            
            //1.遍历key集
            Set set  = map.keySet();
            for(Object obj: set){
                System.out.println(obj);
            }
            System.out.println("----");
            //2.遍历value集
            Collection values = map.values();
            Iterator iterator = values.iterator();
            while(iterator.hasNext()){
                System.out.println(iterator.next());
               }
             //3.遍历key-value对
            //方式一:
            Set set1  = map.keySet();
            for(Object obj : set1){
                //Object get(Object key);  获取指定key的value值,若无此key,则返回null
                System.out.println(obj+"----->"+map.get(obj));
            }
            System.out.println("------");
            
            //方式二:
            Set set2  = map.entrySet();
            for(Object obj:set2){
                Map.Entry  entry =  (Map.Entry)obj;
                System.out.println(entry.getKey()+"---->"+entry.getValue());
            }
         }
        
        
        //LinkedHashMap   使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
        @Test
        public void testLinkedHashMap(){
            Map map = new LinkedHashMap();
            map.put("AA", 12);
            map.put("BB", 143);
            map.put(123, "VV");
            map.put(null, null);
            map.put(new Person("DD", 23), 46);
            System.out.println(map);
        }
        
        
        
        //TreeMap  的自然排序
        @Test
        public void testTreeMap(){
            Map map   = new TreeMap();
            map.put(new Person("AA", 23), 46);
            map.put(new Person("CC", 22), 68);
            map.put(new Person("GGG", 33), 26);
            map.put(new Person("BB", 14), 98);
            map.put(new Person("CC", 14), 98);
    //        System.out.println(map);
            
             Set set1  = map.keySet();
            for(Object obj : set1){
                //Object get(Object key);  获取指定key的value值,若无此key,则返回null
                System.out.println(obj+"----->"+map.get(obj));
            }
        }
        
        
        
        //TreeMap  的定制排序
        @Test
        public void testTreeMap2(){ 
            Comparator com =  new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    if(o1 instanceof Customer && o2 instanceof Customer){
                        Customer c1 = (Customer)o1;
                        Customer c2 = (Customer)o2;
                        int i = c1.getId().compareTo(c2.getId());
                        if(i == 0){
                            return c1.getName().compareTo(c2.getName());
                        }
                        return i;
                    }
                    return 0;
                }
            };
            Map map   = new TreeMap();
            map.put(new Person("AA", 23), 46);
            map.put(new Person("CC", 22), 68);
            map.put(new Person("GGG", 33), 26);
            map.put(new Person("BB", 14), 98);
            map.put(new Person("CC", 14), 98);
           //    System.out.println(map); 
            
            Set set1  = map.keySet();
            for(Object obj : set1){
                //Object get(Object key);  获取指定key的value值,若无此key,则返回null
                System.out.println(obj+"----->"+map.get(obj));
            }
        }
    }


    jdbc.properties
    user=root;
    password=123ab;

    Customer, Person与上篇相同

    All that work will definitely pay off
  • 相关阅读:
    怎么让Windows2012和Windows2008多用户同时远程
    IIS站点/虚拟目录中访问共享目录(UNC)以及建立后的应用程序的信任级别问题
    Mac 快捷键
    SQL Server Profiler
    vscode 实用插件
    Xss测试
    RequireJS和AMD规范
    ECMAScript 6.0 学习笔记
    使用 create-react-app 构建 react应用程序
    vscode 快捷键
  • 原文地址:https://www.cnblogs.com/afangfang/p/12590611.html
Copyright © 2011-2022 走看看